|
The container that accepts these controls must add an event handler for whatever events you want to handle. That event handle is defined by the class contained in Events.cs (that's just a filename, BTW, not a class).
So that the container control can add handlers the event handlers - either instance methods or static methods - must be either public or internal .
An example of adding an event handlers follows:
control1.Click += new EventHandler(someClass.control1_Click); Please note that what you actually call the event handler method doesn't matter (so long as it doesn't conflict with another method or property name) and that different events have different delegates (event handlers), so be sure to read the documentation for the event before wiring it up to an event handler (because that event handler must have the same method signature as the delegate that defines the event).
For more information about handling and raising events, read Handling and Raising Events[^] in the .NET Framework SDK.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Thanks very much Heath. I tried what you said, but the problem is, I can't find a way for the events class (on the events.cs filename) to communicate or talk back to the form where the control is located.
Like for example this very simple scenario.
- the user control is simply a button named 'btnControl'
- i then drag the 'btnControl' to a form named
'contrainer', which also has a textbox in it called 'txtTest', to verify if the user control can talk to the form via a separate events class.
- remember the events of all the controls, which includes 'btnControl' are raised on a separate class called 'events'. Meaning the user controls have does not communicate directly to the form it has been placed.
- so upon click the 'btnControl', i raise an event on the 'events' class, which will change the text of 'txtTest' to "Add button clicked". But i can't seem to communicate back to the opened form, without opening a new form.
Thanks.
|
|
|
|
|
The first parameter of an event handler - typically called sender (it really doesn't matter what the parameter name is, though) - is the control that raised the event. Cast it to the Type like Control to call methods on it, which must be public or internal .
To handle events of a member of another control (your UserControl you dropped on a Form ) you either need to reflect those events in the container control (like define an event called TextBox1Click ) or make the entire field public or internal (this is not a good idea, though, since you expose the entire control to calling code - extremely bad for library developers).
How you handle the event and how you hook up the event all depends on member access and having an instance of a class (or define the event handlers as static methods), so pass an instance of whatever forms and controls necessary in order to hook-up events and handle them.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
i am trying to use managed ASa client to interact with Sybase database.
I am passing a select command and a connection to my data adapter. The second line of my example will create an instance of command bulider. Upto this much working fine. I am getting "invalid Cast exception " when my control flow come to the third line of example.
Any idea
Eg:
this.PlannedClient=new AsaDataAdapter(SqlCommand,Conn);<br />
AsaCommandBuilder Bld=new AsaCommandBuilder(this.PlannedClient);<br />
this.PlannedClient.InsertCommand = Bld.GetInsertCommand();<br />
this.PlannedClient.UpdateCommand = Bld.GetUpdateCommand();<br />
this.PlannedClient.DeleteCommand = Bld.GetDeleteCommand();<br />
this.Planned=new DataSet("Planned");<br />
this.PlannedClient.Fill(Planned,"Trnload");
Sreejith Nair
[ My Articles ]
|
|
|
|
|
sreejith ss nair wrote:
this.PlannedClient.InsertCommand = Bld.GetInsertCommand();<br />
this.PlannedClient.UpdateCommand = Bld.GetUpdateCommand();<br />
this.PlannedClient.DeleteCommand = Bld.GetDeleteCommand();
Those lines are unnecessary. The AsaCommandBuilder constructor is suppose to assign those. The problem is that you need to cast them to AsaCommand (I'm assuming, if they followed the naming guidelines correctly), but you shoudln't execute those three lines. You're just duplicating code.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
I have picturboxes added to a panel at run time. I need to draw a line between two picture boxes and also need to get the respective picturebox tags. The line has to be drawn on the panel by clicking on the one picturebox and dragging the mouse and leaving on the other picturebox. Is it possible ??
Thanks
ninja
|
|
|
|
|
ninja2605 wrote:
picturebox tags
What do you mean by "tags"?
This is possible, but you'll need to extend a container control - like UserControl - and override OnPaint (always override when possible instead of handling events from within derivative classes). Use the Graphics object passed to you in the PaintEventArgs.Graphics property to draw a line. You could also just handle the Paint event from outside the current container control (ex: the Form on which you placed the two PictureBox controls), but I (and pretty much any other developer) find that encapsulating functionality makes it esier to reuse.
Let me suggestion, however, that for complete control you should consider not using two PictureBox controls and instead drawing the pictures yourself. Now wait, don't get scared.
It's actually quite easy using the Graphics object in the OnPaint override that I mentioned before. It has a DrawImage method (overloaded methods, actually). All you need to take care of is where to draw the top-left corner.
Why do I suggest this? Because then you could have a single control (in this case, just extend Control to avoid unnecessary overhead) with a couple of Image type properties defined. Override a few of the mouse event handlers (like OnMouseDown , OnMouseMove , and OnMouseUp ) to track the mouse and draw a line between the pictures. Without using complicated layered windows (which is only supported in Windows 2000 and newer anyway) this is the only way to have the line you draw overlap the images if that's what you want.
When overriding event handlers, be sure to call base.OnEventName otherwise the default implementation (when applicable, which is in most cases) is not executed and the actual event is not fired). Only in a few rare cases (like when handling windows messages in WndProc that you want ignored) should you not call the base class's implementation. In what order you do it greatly depends on what you're doing. For painting, for example, you'll want to call base.OnPaint first so that any owner-drawn decorations are drawn first, then draw your decorations on top of them.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Thanks for the reply Heath. By Tag i mean PicturBox.Tag property. Here is my code, difficult to understand though as there r few commments. Now you might get the clear picture as to what i am trying to achieve. There is drag drop functionality, where i am trying to link images and get their names in a string which i am going to use later. So when i do drag drop i should be able to draw line between images and on the panel.
using System;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;
using System.IO;
namespace medappzDMS.folderList
{
///
/// Summary description for fmlinks.
///
public class fmlinks : System.Windows.Forms.Form
{
private CustomAutoScrollPanel.ScrollablePanel panel1;
private System.Windows.Forms.TabControl tabControl1;
private System.Windows.Forms.TabPage thumbnails;
private System.Windows.Forms.TabPage actualsize;
private System.Windows.Forms.PictureBox[] pb;
private System.Windows.Forms.Label[] lbl;
//private System.ComponentModel.IContainer components;
//private System.Drawing.Image _image = null;
private int _margin = 50;
private bool m_MouseIsDown=false;
private bool m_IsDragDrop=true;
//private bool panelmousedown=false;
//private string[] arrfilename;
private string[] arrfileindex1;
private string[] arrfileindex2;
// private char[] charfileindex1;
private string[] filename;
private string[] filename1;
private string locallink=null;
private string linkfrom=null;
private int j=0;
private bool hascolor=false;
private System.Drawing.Image _image = null;
private string pbcolor;
private int x1=0,y1=0,x2=0,y2=0;
Rectangle SelectRect = new Rectangle();
Point ps=new Point();
private System.Windows.Forms.Label lblviewcurlinks;
private System.Windows.Forms.Label lblcurlinks;
Point pe=new Point();
private System.Windows.Forms.ToolTip toolTip1;
private System.ComponentModel.IContainer components;
private string startcoordinates=null;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.NumericUpDown numericUpDown5;
private System.Windows.Forms.NumericUpDown numericUpDown6;
private string endcoordinates=null;
private System.Drawing.Image Image
{
get { return _image; }
}
public fmlinks()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
string [] fileEntries = Directory.GetFiles(utils.imgfolderpath);
j=fileEntries.Length;
//arrfilename=new string[j];
arrfileindex1=new string[j];
arrfileindex2=new string[j];
//charfileindex1=new char[]{'#'};
filename=new string[j];
filename1=new string[j*3];
//
// TODO: Add any constructor code after InitializeComponent call
//
}
///
/// Clean up any resources being used.
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(fmlinks));
this.tabControl1 = new System.Windows.Forms.TabControl();
this.thumbnails = new System.Windows.Forms.TabPage();
this.numericUpDown6 = new System.Windows.Forms.NumericUpDown();
this.numericUpDown5 = new System.Windows.Forms.NumericUpDown();
this.lblviewcurlinks = new System.Windows.Forms.Label();
this.lblcurlinks = new System.Windows.Forms.Label();
this.panel1 = new CustomAutoScrollPanel.ScrollablePanel();
this.panel2 = new System.Windows.Forms.Panel();
this.actualsize = new System.Windows.Forms.TabPage();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.tabControl1.SuspendLayout();
this.thumbnails.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown6)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown5)).BeginInit();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// tabControl1
//
this.tabControl1.Controls.Add(this.thumbnails);
this.tabControl1.Controls.Add(this.actualsize);
this.tabControl1.Location = new System.Drawing.Point(8, 8);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(580, 520);
this.tabControl1.TabIndex = 0;
this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.tabControl1_SelectedIndexChanged);
//
// thumbnails
//
this.thumbnails.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("thumbnails.BackgroundImage")));
this.thumbnails.Controls.Add(this.numericUpDown6);
this.thumbnails.Controls.Add(this.numericUpDown5);
this.thumbnails.Controls.Add(this.lblviewcurlinks);
this.thumbnails.Controls.Add(this.lblcurlinks);
this.thumbnails.Controls.Add(this.panel1);
this.thumbnails.Location = new System.Drawing.Point(4, 22);
this.thumbnails.Name = "thumbnails";
this.thumbnails.Size = new System.Drawing.Size(572, 494);
this.thumbnails.TabIndex = 0;
this.thumbnails.Text = "Thumbnails";
//
// numericUpDown6
//
this.numericUpDown6.Location = new System.Drawing.Point(352, 8);
this.numericUpDown6.Maximum = new System.Decimal(new int[] {
100000,
0,
0,
0});
this.numericUpDown6.Name = "numericUpDown6";
this.numericUpDown6.TabIndex = 4;
this.numericUpDown6.Visible = false;
this.numericUpDown6.ValueChanged += new System.EventHandler(this.numericUpDown6_ValueChanged);
//
// numericUpDown5
//
this.numericUpDown5.Location = new System.Drawing.Point(488, 8);
this.numericUpDown5.Maximum = new System.Decimal(new int[] {
100000,
0,
0,
0});
this.numericUpDown5.Name = "numericUpDown5";
this.numericUpDown5.TabIndex = 3;
this.numericUpDown5.Visible = false;
this.numericUpDown5.ValueChanged += new System.EventHandler(this.numericUpDown5_ValueChanged);
//
// lblviewcurlinks
//
this.lblviewcurlinks.AutoSize = true;
this.lblviewcurlinks.Location = new System.Drawing.Point(192, 16);
this.lblviewcurlinks.Name = "lblviewcurlinks";
this.lblviewcurlinks.Size = new System.Drawing.Size(0, 16);
this.lblviewcurlinks.TabIndex = 2;
//
// lblcurlinks
//
this.lblcurlinks.Location = new System.Drawing.Point(48, 16);
this.lblcurlinks.Name = "lblcurlinks";
this.lblcurlinks.Size = new System.Drawing.Size(72, 23);
this.lblcurlinks.TabIndex = 1;
this.lblcurlinks.Text = "Current Link";
//
// panel1
//
this.panel1.AutoScroll = true;
this.panel1.AutoScrollHorizontalMaximum = 100;
this.panel1.AutoScrollHorizontalMinimum = 0;
this.panel1.AutoScrollHPos = 0;
this.panel1.AutoScrollVerticalMaximum = 100;
this.panel1.AutoScrollVerticalMinimum = 0;
this.panel1.AutoScrollVPos = 0;
this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.panel1.Controls.Add(this.panel2);
this.panel1.EnableAutoScrollHorizontal = true;
this.panel1.EnableAutoScrollVertical = true;
this.panel1.Location = new System.Drawing.Point(8, 48);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(568, 440);
this.panel1.TabIndex = 0;
this.panel1.VisibleAutoScrollHorizontal = true;
this.panel1.VisibleAutoScrollVertical = true;
this.panel1.ScrollVertical += new System.Windows.Forms.ScrollEventHandler(this.panel1_ScrollVertical);
this.panel1.ScrollHorizontal += new System.Windows.Forms.ScrollEventHandler(this.panel1_ScrollHorizontal);
this.panel1.ScrollMouseWheel += new System.Windows.Forms.MouseEventHandler(this.panel1_ScrollMouseWheel);
//
// panel2
//
this.panel2.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("panel2.BackgroundImage")));
this.panel2.Location = new System.Drawing.Point(24, 16);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(700, 750);
this.panel2.TabIndex = 0;
this.panel2.Click += new System.EventHandler(this.panel2_Click);
this.panel2.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseUp);
this.panel2.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint);
this.panel2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseMove);
this.panel2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown);
//
// actualsize
//
this.actualsize.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("actualsize.BackgroundImage")));
this.actualsize.Location = new System.Drawing.Point(4, 22);
this.actualsize.Name = "actualsize";
this.actualsize.Size = new System.Drawing.Size(648, 438);
this.actualsize.TabIndex = 1;
this.actualsize.Text = "Actual Size";
//
// fmlinks
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage")));
this.ClientSize = new System.Drawing.Size(592, 542);
this.Controls.Add(this.tabControl1);
this.Name = "fmlinks";
this.Load += new System.EventHandler(this.fmlinks_Load);
this.tabControl1.ResumeLayout(false);
this.thumbnails.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.numericUpDown6)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown5)).EndInit();
this.panel1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private void DisplayThumbnails()
{
//string sourceDir="g:\\images";
string [] fileEntries = Directory.GetFiles(utils.imgfolderpath);
int j=fileEntries.Length;
//get the first and second filename numbers in an array for example for file 1_2_medhistory.png
//getting 1 and 2
for(int i=0; i<j; i++)
="" {
="" char[]="" charfileindex;
="" charfileindex="new" char[]{'_'};
="" int="" index="fileEntries[i].ToString().LastIndexOf(@"\");
" string="" s="fileEntries[i].ToString().Substring(index+1);
" filename[i]="s;
"
="" filename1="filename[i].Split(charfileindex);
" arrfileindex1[i]="filename1[0];
" arrfileindex2[i]="filename1[1];
" }
="" try
="" pb="new" system.windows.forms.picturebox[j];
="" lbl="new" system.windows.forms.label[j];
="" messagebox.show(fileindex2max.tostring());
="" for(int="" i="0" ;="" <="" j="" i++="" )
="" folderpath="g:\\images" ;
="" image="" img="Image.FromFile(folderpath" +="" @"\"="" (i+1)="" "_"+k+"_medicalhistorypage_done.png");
="" if(file.exists(utils.imgfolderpath="" (arrfileindex1[i])="" "_"="" (arrfileindex2[i])="" "_medicalhistorypage_done.png"))
="" pb[i]="new" picturebox();
="" lbl[i]="new" label();
="" pb[i].image="Image.FromFile(folderpath" "_medicalhistorypage_done.png");
="" _image="Image.FromFile(utils.imgfolderpath" pb[i].backcolor="Color.Black;
" pb[i].width="150;
" pb[i].name="arrfileindex1[i].ToString()+"_"+arrfileindex2[i].ToString();
" pb[i].height="120;
" lbl[i].width="60;
" lbl[i].height="15;
" pb[i].tag="arrfileindex1[i].ToString()+"_"+arrfileindex2[i].ToString();
" messagebox.show(pb[i,k].tag.tostring());
="" pb[i].sizemode="PictureBoxSizeMode.CenterImage;
" numberhorizontal="-1;
" if="" (numberhorizontal="" 0)
="" determine="" how="" many="" thumbnails="" can="" be="" displayed="" on="" one="" row
="" (this.panel2.width="" pb[i].width);
="" set="" the="" position="" for="" thumbnail="" and="" add="" it="" to="" panel's="" controls
="" pb[i].left="_margin" (pb[i].width+_margin)="" *="" ((this.panel2.controls.count="" 2)="" %="" (numberhorizontal-1));
="" pb[i].top="_margin" (pb[i].height+_margin)="" lbl[i].left="pb[i].Left" 60;
="" lbl[i].top="pb[i].Top" 120;
="" lbl[i].backcolor="Color.White;
" pb[i].click+="new" eventhandler(pictureclick);
="" pb[i].mousedown+="new" mouseeventhandler(picturemousedown);
="" pb[i].mousemove+="new" mouseeventhandler(picturemousemove);
="" pb[i].dragdrop+="new" drageventhandler(picturedragdrop);
="" pb[i].dragenter+="new" drageventhandler(picturedragenter);
="" pb[i].mouseup+="new" mouseeventhandler(picturemouseup);
="" pb[i].paint+="new" painteventhandler(imageview1_paint);
="" pb[i].allowdrop="true;
" pb[i].enabled="false;
" disable="" picturebox="" which="" are="" already="" linked
="" if(utils.globallink!="null)
//" tag="arrfileindex1[i].ToString()+"_"+arrfileindex2[i].ToString();
//" if(index!="-1)
//" lbl[i].mousemove+="new" mouseeventhandler(lblimageview_mousemove);
="" lbl[i].click+="new" eventhandler(lblimageview_click);
="" lbl[i].text="(arrfileindex1[i])" (arrfileindex2[i]);
="" this.panel1.controls.add(pb[i]);
="" this.panel1.controls.add(lbl[i]);
="" max="Math.Min(150," 120);
="" width="_image.Width;
" height="_image.Height;
" size="" image
="" (_image.width=""> max || _image.Height > max)
{
if (_image.Width > _image.Height)
{
width = max+15;
height = (int) (_image.Height * max / _image.Width)-10;
}
else
{
width = (int) (_image.Width * max / _image.Height)+15;
height = max-10;
}
}
pb[i].Image = new Bitmap(_image, width, height);
this.panel2.Controls.Add(pb[i]);
pb[i].SendToBack();
}
this.panel2.Controls.AddRange(lbl);
// this.panel1.Controls.AddRange(pb);
if((j%4)==0)
{
panel2.Height=(j/4)*150;
}
else
{
panel2.Height=(int)((j/4)*150+250);
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
private void pictureClick(object sender, System.EventArgs e)
{
panel1.Focus();
//pb[j].Tag=1;
// PictureBox who1=(PictureBox) sender;
// if(who1.Image!=null)
// {
// //who1.BackColor=Color.Black;
// m_MouseIsDown=false;
// utils.img = who1.Image;
// utils.imgname=who1.Tag.ToString();
// //MessageBox.Show(who1.Tag.ToString());
// actualimagesize frmAIS=new actualimagesize();
// frmAIS.ShowDialog();
//
//
//
// }
}
private void pictureMouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
PictureBox who=(PictureBox) sender;
//MessageBox.Show(who.Tag.ToString());
if(who.Image!=null)
{
//Panel who1=(Panel) panel1;
//toolTip1.Dispose();
//MessageBox.Show(who.Tag.ToString());
linkfrom=who.Tag.ToString();
m_MouseIsDown=true;
//who.Focus();
//who.BackColor=Color.Tomato;
ps.X = e.X;
ps.Y = e.Y;
pe = ps;
string x=e.X.ToString();
string y=e.Y.ToString();
string coord=x+","+y;
if(startcoordinates==null)
{
startcoordinates=coord;
}
else
{
startcoordinates=startcoordinates+"#"+coord;
}
// panelmousedown=true;
}
}
private void pictureMouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
PictureBox who=(PictureBox) sender;
//who.Cursor=Cursors.Hand;
//toolTip1.SetToolTip(who, "Click to view document full size. Drag the document to link it to another document");
if(m_MouseIsDown==true)
{
//code added on 12/21/2004 for backcolor of picturbox
if(hascolor==false)
{
Color c = new Color();
c=medappzDMS.utils.GetRandomColor();
pbcolor=c.Name;
hascolor=true;
}
// MessageBox.Show(pbcolor);
//who.BackColor=utils.getcolorname(pbcolor);
//code end 12/21/2004
who.DoDragDrop(who.Image, DragDropEffects.Move);
m_IsDragDrop=true;
}
m_MouseIsDown=false;
}
private void pictureDragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
if(e.Data.GetDataPresent(DataFormats.Bitmap))
{
//Check for the CTRL key.
if(e.KeyState == 9)
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.Move;
}
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void pictureDragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
if(m_IsDragDrop==true)
{
PictureBox who=(PictureBox) sender;
//code 12/21/2004
//who.BackColor=utils.getcolorname(pbcolor);
//DrawLineInt(who);
//code end 12/21/2004
string linkto=who.Tag.ToString();
//MessageBox.Show(who.Tag.ToString());
if(linkfrom==linkto)
{
//who.BackColor=Color.Black;
m_MouseIsDown=false;
utils.img = who.Image;
utils.imgname=who.Tag.ToString();
actualimagesize frmAIS=new actualimagesize();
frmAIS.ShowDialog();
}
else
{
if(locallink==null)
{
locallink=linkfrom+","+linkto;
// MessageBox.Show(locallink);
lblviewcurlinks.Text=locallink;
}
else
{
int index=locallink.IndexOf(linkto);
int index1=locallink.IndexOf(linkfrom);
if((index==-1)&&(index1==-1))
{
locallink+=","+linkfrom+","+linkto;
// MessageBox.Show(locallink);
lblviewcurlinks.Text=locallink;
}
else if((index==-1)&&(index1!=-1))
{
locallink+=","+linkto;
// MessageBox.Show(locallink);
lblviewcurlinks.Text=locallink;
}
else if((index!=-1)&&(index1==-1))
{
locallink+=","+linkfrom;
// MessageBox.Show(locallink);
lblviewcurlinks.Text=locallink;
}
else
{
// MessageBox.Show(locallink);
lblviewcurlinks.Text=locallink;
}
}
}
Panel thisform = (Panel) panel1;
// First DrawReversible to toggle to the background color
// Second DrawReversible to toggle to the specified color
ControlPaint.DrawReversibleLine(thisform.PointToScreen(ps), thisform.PointToScreen(pe), Color.Black);
pe.X = e.X;
pe.Y = e.Y;
string x=e.X.ToString();
string y=e.Y.ToString();
string coord=x+","+y;
if(endcoordinates==null)
{
endcoordinates=coord;
}
else
{
endcoordinates=endcoordinates+"#"+coord;
}
//ControlPaint.DrawReversibleLine(thisform.PointToScreen(ps), thisform.PointToScreen(pe), Color.Black);
//Panel thisform = (Panel)sender;
Graphics g = thisform.CreateGraphics();
Pen p = new Pen(Color.Blue, 2);
//ControlPaint.DrawReversibleLine(thisform.PointToScreen(ps), thisform.PointToScreen(pe), Color.Black);
g.DrawLine(p, ps, pe);
g.Dispose();
}
//btnstop.Enabled=true;
m_IsDragDrop=false;
}
public void DrawLineInt(PaintEventArgs e)
{
// Create pen.
Pen blackPen = new Pen(Color.Black, 3);
e.Graphics.DrawLine(blackPen, x1, y1, x2, y2);
}
private void imageview1_Paint(object sender, PaintEventArgs e)
{
}
private void pictureMouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
// if (e.Button==MouseButtons.Left)
// {
//
// Panel thisform = (Panel) panel1;
//
// // First DrawReversible to toggle to the background color
// // Second DrawReversible to toggle to the specified color
// ControlPaint.DrawReversibleLine(thisform.PointToScreen(ps), thisform.PointToScreen(pe), Color.Black);
// pe.X = e.X;
// pe.Y = e.Y;
// string x=e.X.ToString();
// string y=e.Y.ToString();
// string coord=x+","+y;
// if(endcoordinates==null)
// {
// endcoordinates=coord;
// }
// else
// {
// endcoordinates=endcoordinates+"#"+coord;
// }
// ControlPaint.DrawReversibleLine(thisform.PointToScreen(ps), thisform.PointToScreen(pe), Color.Black);
//
//
//
// //Panel thisform = (Panel)sender;
// Graphics g = thisform.CreateGraphics();
// Pen p = new Pen(Color.Blue, 2);
//
// ControlPaint.DrawReversibleLine(thisform.PointToScreen(ps), thisform.PointToScreen(pe), Color.Black);
// g.DrawLine(p, ps, pe);
//
// g.Dispose();
// }
}
private void fmlinks_Load(object sender, System.EventArgs e)
{
DisplayThumbnails();
}
private void panel1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
for (int i=0; i< panel1.Controls.Count; i++)
{
if(panel1.Controls[i].Focused==true)
{
//panel1.Controls[i].Enabled=true;
MessageBox.Show(panel1.Controls[i].Tag.ToString());
}
}
ps.X = e.X + panel1.AutoScrollHPos;
ps.Y = e.Y + panel1.AutoScrollVPos;
pe = ps;
string x=e.X.ToString();
string y=e.Y.ToString();
string coord=x+","+y;
//MessageBox.Show(panel1.AutoScrollPosition.X.ToString()+" "+panel1.AutoScrollPosition.Y.ToString());
if(startcoordinates==null)
{
startcoordinates=coord;
}
else
{
startcoordinates=startcoordinates+"#"+coord;
}
// panelmousedown=true;
}
private void panel1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
// if (e.Button==MouseButtons.Left)
// {
// if(panelmousedown==true)
// {
// Panel thisform = (Panel)sender;
//
// First DrawReversible to toggle to the background color
// Second DrawReversible to toggle to the specified color
// ControlPaint.DrawReversibleLine(thisform.PointToScreen(ps), thisform.PointToScreen(pe), Color.Black);
// pe.X = e.X;
// pe.Y = e.Y;
// string x=e.X.ToString();
// string y=e.Y.ToString();
// string coord=x+","+y;
// if(endcoordinates==null)
// {
// endcoordinates=coord;
// }
// else
// {
// endcoordinates=endcoordinates+"#"+coord;
// }
// ControlPaint.DrawReversibleLine(thisform.PointToScreen(ps), thisform.PointToScreen(pe), Color.Black);
//
// }
// panelmousedown=false;
//}
}
private void panel1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button==MouseButtons.Left)
{
Panel thisform = (Panel)sender;
// First DrawReversible to toggle to the background color
// Second DrawReversible to toggle to the specified color
ControlPaint.DrawReversibleLine(thisform.PointToScreen(ps), thisform.PointToScreen(pe), Color.Black);
pe.X = e.X + panel1.AutoScrollHPos;
pe.Y = e.Y + panel1.AutoScrollVPos;
string x=e.X.ToString();
string y=e.Y.ToString();
string coord=x+","+y;
if(endcoordinates==null)
{
endcoordinates=coord;
}
else
{
endcoordinates=endcoordinates+"#"+coord;
}
ControlPaint.DrawReversibleLine(thisform.PointToScreen(ps), thisform.PointToScreen(pe), Color.Black);
//Panel thisform = (Panel)sender;
Graphics g = thisform.CreateGraphics();
Pen p = new Pen(Color.Blue, 2);
ControlPaint.DrawReversibleLine(thisform.PointToScreen(ps), thisform.PointToScreen(pe), Color.Black);
g.DrawLine(p, ps, pe);
g.Dispose();
MessageBox.Show(startcoordinates);
}
}
private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e)
{
//this.panel1.SuspendLayout();
}
private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Panel thisform = (Panel)sender;
Graphics g = thisform.CreateGraphics();
Pen p = new Pen(Color.Blue, 2);
if((startcoordinates!=null)||(endcoordinates!=null))
{
char[] charfileindex1;
charfileindex1=new char[]{'#'};
char[] charfileindex2;
charfileindex2=new char[]{'#'};
int charfileindexlen1=startcoordinates.Split(charfileindex1).Length;
string[] ss=new string[charfileindexlen1];
ss=startcoordinates.Split(charfileindex1);
string[] ss1=new string[charfileindexlen1];
ss1=endcoordinates.Split(charfileindex1);
for(int i=0; i
|
|
|
|
|
The way I told you is best. It has the least amount of overhead (only one control is needed instead of two), you can overlap the line with the pictures, and instead of handling events for three controls you're only handling events for one control by overriding the event handlers (OnEventName methods). This is simple owner drawing. I could certainly do it in a lot less lines and with more control than what you have above.
Take a look at the Graphics.DrawImage overloads. They're easy to use and will draw the image for you at the specified location (and even stretch them and apply optional matrix transformations).
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
But the thing is i dont have just two images, i have images coming from a folder and their nuumber can vary and need to be placed systematically on a panel and then i need to draw lines between them. Is it possible in the way you have told me, please let me know.
Thanks
Nitin
|
|
|
|
|
So instead of calling Graphics.DrawImage twice call it as many times as you need. It's no different conceptually than instantiating X number of PictureBox es, siting those in your container control, and loading images into them. The biggest differences between drawing the images yourself and using PictureBox controls is that PictureBox controls have more overhead (they're controls - not just an image) and aren't as flexible as drawing the images yourself. Like I said before, if you want your line to overlap the images you either need to use layered windows (not easy - requires that you P/Invoke a could of native methods, define constants from various Windows APIs headers, and a couple of structs that are defined natively) or draw it all on the same surface. It's really not that hard.
Again, read the documentation for the Graphics class which has a lot of examples for owner-drawing as well.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Hello Heath,
I have tried to implement what you told me to but when i scroll the panel i lose the images and the system becomes too slow. I am calling DisplayThumbnails1() on panel1_paint. Here is the code
using System;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;
using System.IO;
namespace medappzDMS.folderList
{
///
/// Summary description for fmlinks.
///
public class fmlinks : System.Windows.Forms.Form
{
private CustomAutoScrollPanel.ScrollablePanel panel1;
private System.Windows.Forms.TabControl tabControl1;
private System.Windows.Forms.TabPage thumbnails;
private System.Windows.Forms.TabPage actualsize;
private System.Windows.Forms.PictureBox[] pb;
private System.Windows.Forms.Label[] lbl;
//private System.ComponentModel.IContainer components;
//private System.Drawing.Image _image = null;
private int _margin = 50;
private bool m_MouseIsDown=false;
private bool m_IsDragDrop=true;
//private bool panelmousedown=false;
//private string[] arrfilename;
private string[] arrfileindex1;
private string[] arrfileindex2;
// private char[] charfileindex1;
private string[] filename;
private string[] filename1;
private string locallink=null;
private string linkfrom=null;
private int j=0;
private bool hascolor=false;
private System.Drawing.Image _image = null;
private string pbcolor;
private int x1=0,y1=0,x2=0,y2=0;
Rectangle SelectRect = new Rectangle();
Point ps=new Point();
private System.Windows.Forms.Label lblviewcurlinks;
private System.Windows.Forms.Label lblcurlinks;
Point pe=new Point();
private System.Windows.Forms.ToolTip toolTip1;
private System.ComponentModel.IContainer components;
private string startcoordinates=null;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.NumericUpDown numericUpDown5;
private System.Windows.Forms.NumericUpDown numericUpDown6;
private string endcoordinates=null;
//private Image[] newimage;
private int width=150;
private int height=120;
private bool imagedrawn=false;
private System.Drawing.Image Image
{
get { return _image; }
}
public fmlinks()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
string [] fileEntries = Directory.GetFiles(utils.imgfolderpath);
j=fileEntries.Length;
//arrfilename=new string[j];
arrfileindex1=new string[j];
arrfileindex2=new string[j];
//charfileindex1=new char[]{'#'};
filename=new string[j];
filename1=new string[j*3];
//newimage=new Image[j];
//
// TODO: Add any constructor code after InitializeComponent call
//
}
///
/// Clean up any resources being used.
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(fmlinks));
this.tabControl1 = new System.Windows.Forms.TabControl();
this.thumbnails = new System.Windows.Forms.TabPage();
this.numericUpDown6 = new System.Windows.Forms.NumericUpDown();
this.numericUpDown5 = new System.Windows.Forms.NumericUpDown();
this.lblviewcurlinks = new System.Windows.Forms.Label();
this.lblcurlinks = new System.Windows.Forms.Label();
this.panel1 = new CustomAutoScrollPanel.ScrollablePanel();
this.panel2 = new System.Windows.Forms.Panel();
this.actualsize = new System.Windows.Forms.TabPage();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.tabControl1.SuspendLayout();
this.thumbnails.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown6)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown5)).BeginInit();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// tabControl1
//
this.tabControl1.Controls.Add(this.thumbnails);
this.tabControl1.Controls.Add(this.actualsize);
this.tabControl1.Location = new System.Drawing.Point(8, 8);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(580, 520);
this.tabControl1.TabIndex = 0;
//
// thumbnails
//
this.thumbnails.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("thumbnails.BackgroundImage")));
this.thumbnails.Controls.Add(this.numericUpDown6);
this.thumbnails.Controls.Add(this.numericUpDown5);
this.thumbnails.Controls.Add(this.lblviewcurlinks);
this.thumbnails.Controls.Add(this.lblcurlinks);
this.thumbnails.Controls.Add(this.panel1);
this.thumbnails.Location = new System.Drawing.Point(4, 22);
this.thumbnails.Name = "thumbnails";
this.thumbnails.Size = new System.Drawing.Size(572, 494);
this.thumbnails.TabIndex = 0;
this.thumbnails.Text = "Thumbnails";
//
// numericUpDown6
//
this.numericUpDown6.Location = new System.Drawing.Point(352, 8);
this.numericUpDown6.Maximum = new System.Decimal(new int[] {
100000,
0,
0,
0});
this.numericUpDown6.Name = "numericUpDown6";
this.numericUpDown6.TabIndex = 4;
this.numericUpDown6.Visible = false;
this.numericUpDown6.ValueChanged += new System.EventHandler(this.numericUpDown6_ValueChanged);
//
// numericUpDown5
//
this.numericUpDown5.Location = new System.Drawing.Point(488, 8);
this.numericUpDown5.Maximum = new System.Decimal(new int[] {
100000,
0,
0,
0});
this.numericUpDown5.Name = "numericUpDown5";
this.numericUpDown5.TabIndex = 3;
this.numericUpDown5.Visible = false;
this.numericUpDown5.ValueChanged += new System.EventHandler(this.numericUpDown5_ValueChanged);
//
// lblviewcurlinks
//
this.lblviewcurlinks.AutoSize = true;
this.lblviewcurlinks.Location = new System.Drawing.Point(192, 16);
this.lblviewcurlinks.Name = "lblviewcurlinks";
this.lblviewcurlinks.Size = new System.Drawing.Size(0, 16);
this.lblviewcurlinks.TabIndex = 2;
//
// lblcurlinks
//
this.lblcurlinks.Location = new System.Drawing.Point(48, 16);
this.lblcurlinks.Name = "lblcurlinks";
this.lblcurlinks.Size = new System.Drawing.Size(72, 23);
this.lblcurlinks.TabIndex = 1;
this.lblcurlinks.Text = "Current Link";
//
// panel1
//
this.panel1.AutoScroll = true;
this.panel1.AutoScrollHorizontalMaximum = 100;
this.panel1.AutoScrollHorizontalMinimum = 0;
this.panel1.AutoScrollHPos = 0;
this.panel1.AutoScrollVerticalMaximum = 100;
this.panel1.AutoScrollVerticalMinimum = 0;
this.panel1.AutoScrollVPos = 0;
this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.panel1.Controls.Add(this.panel2);
this.panel1.EnableAutoScrollHorizontal = true;
this.panel1.EnableAutoScrollVertical = true;
this.panel1.Location = new System.Drawing.Point(8, 48);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(568, 440);
this.panel1.TabIndex = 0;
this.panel1.VisibleAutoScrollHorizontal = true;
this.panel1.VisibleAutoScrollVertical = true;
this.panel1.ScrollVertical += new System.Windows.Forms.ScrollEventHandler(this.panel1_ScrollVertical);
this.panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint_1);
this.panel1.ScrollHorizontal += new System.Windows.Forms.ScrollEventHandler(this.panel1_ScrollHorizontal);
this.panel1.ScrollMouseWheel += new System.Windows.Forms.MouseEventHandler(this.panel1_ScrollMouseWheel);
//
// panel2
//
this.panel2.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("panel2.BackgroundImage")));
this.panel2.Location = new System.Drawing.Point(24, 16);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(700, 750);
this.panel2.TabIndex = 0;
this.panel2.Click += new System.EventHandler(this.panel2_Click);
this.panel2.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseUp);
this.panel2.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint);
this.panel2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseMove);
this.panel2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown);
//
// actualsize
//
this.actualsize.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("actualsize.BackgroundImage")));
this.actualsize.Location = new System.Drawing.Point(4, 22);
this.actualsize.Name = "actualsize";
this.actualsize.Size = new System.Drawing.Size(572, 494);
this.actualsize.TabIndex = 1;
this.actualsize.Text = "Actual Size";
//
// fmlinks
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage")));
this.ClientSize = new System.Drawing.Size(592, 542);
this.Controls.Add(this.tabControl1);
this.Name = "fmlinks";
this.Load += new System.EventHandler(this.fmlinks_Load);
this.Paint += new System.Windows.Forms.PaintEventHandler(this.fmlinks_Paint);
this.tabControl1.ResumeLayout(false);
this.thumbnails.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.numericUpDown6)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDown5)).EndInit();
this.panel1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private void fmlinks_Load(object sender, System.EventArgs e)
{
//DisplayThumbnails1();
}
private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
DisplayThumbnails1();
}
private void panel1_ScrollHorizontal(object sender, System.Windows.Forms.ScrollEventArgs e)
{
//this.label2.Text = "horizontal scroll :: type: " + e.Type.ToString();// + " :: pos: " + e.NewValue;
this.numericUpDown5.Value = e.NewValue;
// this.panel1.AutoScrollHPos =e.NewValue;
}
private void panel1_ScrollVertical(object sender, System.Windows.Forms.ScrollEventArgs e)
{
//this.label2.Text = "vertical scroll :: type: " + e.Type.ToString();
this.numericUpDown6.Value = e.NewValue;
//this.panel1.AutoScrollVPos = e.NewValue;
}
private void panel1_ScrollMouseWheel(object sender, System.Windows.Forms.MouseEventArgs e)
{
//this.label4.Text = e.Delta.ToString();
//this.numericUpDown6.Value = this.panel1.AutoScrollVPos;
//this.panel1.AutoScrollVPos = e.NewValue;
}
private void panel2_Click(object sender, System.EventArgs e)
{
this.panel1.Focus();
}
private void numericUpDown5_ValueChanged(object sender, System.EventArgs e)
{
this.panel1.AutoScrollHPos = System.Convert.ToInt32( this.numericUpDown5.Value );
}
private void numericUpDown6_ValueChanged(object sender, System.EventArgs e)
{
this.panel1.AutoScrollVPos = System.Convert.ToInt32( this.numericUpDown6.Value );
}
private void DisplayThumbnails1()
{
Panel thisform = (Panel)panel2 ;
Graphics g = thisform.CreateGraphics();
string [] fileEntries = Directory.GetFiles(utils.imgfolderpath);
int j=fileEntries.Length;
for(int i=0; i
|
|
|
|
|
There's several things wrong I can see by scanning this over:- Put
g.Dispose in a finally block, however... - DO NOT use
CreateGraphics with owner-drawing; use the PaintEventArgs.Graphics that is passed to you in your OnPaint override. This could be responsible for quite a bit of the performance problem. Use the right ControlStyles bits in call to Control.SetStyle in your constructor to send all paint messages to OnPaint and allow for double-buffering. Be sure to read the documentation for the ControlStyles enumeration so that you use the right flags. In order to enable double-buffering you need to specify three different enumeration members. These are mentioned in the documentation for said enumeration. - When painting your controls - don't redraw the whole thing. You only need to re-draw what is passed to you in the
PaintEventArgs.ClipRectangle . Depending on what you're drawing, the Graphics class members let you draw certain rectangles of an image only. If you redraw the entire image every time you will also notice performance pentalties, especially if transforms are applied to shrink the image, etc.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Hello Heath,
Thanks for all the help. I have implemented point 1 and 2 but i am not able to implement point 3. I am calling Displaythumbnails() on panel paint event, it redraws all the images again, how do i implement cliprectangle? The application becomes slow when i scroll the panel
Thanks
Nitin
|
|
|
|
|
Use the methods of the Rectangle struct (of which ClipRectangle is defined) to see if your images and lines (artifacts) lie within the clipping rectangle, then redraw them. Do not redraw artifacts that lie outside of the clipping rectangle.
If you can, only redraw portions of the artifacts that are within the clipping rectangle.
There's many articles here on CodeProject about drawing. I suggest you try searching for them by using the search textbox at the top of every page directly underneath the logo.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Thanks for all the help Heath. My previous problems are solved. Now i have a new one, its regarding Pen object. I am drawing lines of different colors based on a criteria. I have an If Else loop and when the panel paint event is called it selects the color specified in the else statement by default. Kinda overrides the color in the if statement. So all the lines turn out be blue. Here is the code:
foreach(Line l in Lines)
{
if(locallink!=null)
{
char charfileindex1='#';
int charfileindexlen1=locallink.Split(charfileindex1).Length;
string[] ss=new string[charfileindexlen1];
ss=locallink.Split(charfileindex1);
for(int i=0; i<charfileindexlen1; i++)
="" {
="" int="" index="ss[i].IndexOf(dragimage);
" if(checklinks(ss[i].tostring())=""> 0)
{
DrawAssocLine(l);
label4.Text="Red"+k.ToString();
k++;
}
else
{
DrawLine(l);
label5.Text="Blue"+m.ToString();
m++;
}
}
}
}
Region r = getRegionByLine(line,p);
thumbnailpanel.Invalidate(r);
thumbnailpanel.Update();
r.Dispose();
|
|
|
|
|
My Form is flickering like hell, maybe because I have a lot of components in it (treeview, textboxes, listboxes, toolbar, menu, statusbar), and i couldn't find any solution for this. Double Buffering with SetStyle didn't work.
What can I do to reduce the flickering?
|
|
|
|
|
ControlStyles.DoubleBuffer - which must be combined with ControlStyles.AllPaintingInWmPaint and ControlStyles.UserPaint as the documentation states - is only effective when drawing your own forms. It will not simply change how GDI+ renders controls.
If you're getting flickering from including controls from the BCL on your form (all of which - at least for those you mentioned - encapsulates the native Common Controls) then you're machine is most likely the problem (or you're taxing the CPU by some pretty hefty code in your form's OnResize override or Resize event handler).
Check to make sure your monitor's refresh rate is as high as the monitor will support. If you're system doesn't have a lot of memory I recommend getting more memory.
Without knowing more it's hard to say, though. Do you have a lot of code in either the override or event handler I mentioned above? Is there anything else going on when your resizing or moving the form around? Do you have 20 instances of VS.NET open?
Basically, you should not be seeing any flickering (within reason; a Pentium I or II would be bad with, say, XP). Those controls you mentioned are actually the native controls that are wrapped by Windows Forms (so that controls are consistent with the platform, unlike Java AWT or Swing - though controls native to the framework have their advantages, too). If you're not seeing flickering on any of your native applications (like Windows Explorer, for example) then something else is the problem.
If you are doing a lot of work in your application when the form moves around or is resized then consider doing that work in a separate thread (if possible) so that the form can be repainted. If you need to update the UI from another thread, be sure to update the UI (i.e., makes calls on it) in the thread on which it was created by using the Control.Invoke method.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
I don't think that the problem is dependent from my machine. I have a Athlon 2200+ CPU and 500 Megabytes RAM and it also happens without having the CPU loaded.
And it flickers as much as it does on my 1.5Ghz Notebook.
And yes I have a OnResize Event but commented out it's content. (it flickers on both ways)
I'll try to create a new Project and copy all forms from my original program to see if my program causes that flickering.
Thanks for investing so much (writing-)time for this
|
|
|
|
|
TyronX wrote:
And yes I have a OnResize Event but commented out it's content.
There is no OnResize event. If you override OnResize you must either comment the entire definition of the method (including the method itself) or call base.OnResize , passing the parameters you were given. When you override a method you are being called in place of the base class's implementation. Often times the base class implements something in that handler, besides firing the event.
So, if you are overriding it call base.OnResize or comment out the whole thing. If you're handling the Resize event than this isn't a problem (only with cancelable events like those defined as CancelEventHandler can you cancel whatever implementation the base event handler allows, like setting a property or losing focus for things like input validation).
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Sustained Engineering
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
Oh. No, I meant the Resize Event. I wasn't sure wether both were the same
|
|
|
|
|
Hi Everybody,
If got a problem:
When I run my program I get an error:
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll
I tried a lot of other things but I still get this error.
Can anybody see what the problem is?
The code (of the class):
using System;
using System.Data;
using System.Data.OleDb;
namespace AISDBL
{
///
/// Summary description for Database.
///
public class Database
{
OleDbDataAdapter dataAdapter;
//SqlDataAdapter dataAdapter;
string connectionString;
public Database(string applicationPath)
{
connectionString = @"PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=./data/db.mdb;";
}
public DataSet getNieuws()
{
string SqlString = "select * from user";
DataSet dstResult= new DataSet();
dataAdapter = new OleDbDataAdapter(SqlString, connectionString);
dataAdapter.Fill(dstResult);
return dstResult;
}
}
}
Thanks
|
|
|
|
|
Robske wrote:
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll
And what does the additional information of the exception say? The answer will be there, without it we cannot help you.
PS: You need to open the Connection, before calling Fill().
top secret Download xacc-ide 0.0.3 now! See some screenshots
|
|
|
|
|
I Changed a few things but still the same error:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.Data.OleDb.OleDbException: The component FROM contains a syntax error.
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
at AISDBL.Database.getNieuws() in d:\ontwikkelmap\visual studio projects\ais\aisdbl\database.cs:line 33
at AIS.FrmLogin.btnLogin_Click(Object sender, EventArgs e) in d:\ontwikkelmap\visual studio projects\ais\ais\load\frmlogin.cs:line 141
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
AIS
Assembly Version: 1.0.1818.29878
Win32 Version: 1.0.1818.29878
CodeBase: file:///D:/Ontwikkelmap/Visual%20studio%20projects/AIS/AIS/bin/Debug/AIS.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
System.Xml
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
----------------------------------------
AISDBL
Assembly Version: 1.0.1818.29877
Win32 Version: 1.0.1818.29877
CodeBase: file:///D:/Ontwikkelmap/Visual%20studio%20projects/AIS/AIS/bin/Debug/AISDBL.DLL
----------------------------------------
System.Data
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.data/1.0.5000.0__b77a5c561934e089/system.data.dll
----------------------------------------
************** JIT Debugging **************
To enable just in time (JIT) debugging, the config file for this
application or machine (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitdebugging="true">
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the machine
rather than being handled by this dialog.
I dont understand because it's simple code
|
|
|
|
|
Robske wrote:
************** Exception Text **************
System.Data.OleDb.OleDbException: The component FROM contains a syntax error.
So there is your problem. Could be wrong table name or the one u chose mite be a system table and it doesnt resolve, etc etc.
top secret Download xacc-ide 0.0.3 now! See some screenshots
|
|
|
|
|