1.textbox显示鼠标相对于某个的坐标:
private void pictureBox1_MouseMove(object sender, MouseEventArgs e){Point screenPoint =pictureBox1 .PointToClient( Control.MousePosition);//鼠标相对于屏幕左上角的坐标MousePosition.Text = screenPoint.ToString();/////此处MousePosition指的是textbox的名字}
2.picturebox随着窗体的大小同比例的变大变小:(Form内写)
#region 控件大小随着窗体大小等比例缩放private float x;//定义当前窗体的宽度private float y;//定义当前窗体的高度private void setTag(Control cons){foreach (Control con in cons.Controls){con.Tag = con.Width + ";" + con.Height + ";" + con.Left + ";" + con.Top + ";" + con.Font.Size;if (con.Controls.Count > 0){setTag(con);}}}private void setControls(float newx, float newy, Control cons){//遍历窗体中的控件,重新设置控件的值foreach (Control con in cons.Controls){//获取控件的Tag属性值,并分割后存储字符串数组if (con.Tag != null){string[] mytag = con.Tag.ToString().Split(new char[] {';'});//根据窗体缩放的比例确定控件的值con.Width = Convert.ToInt32(System.Convert.ToSingle(mytag[0]) * newx);//宽度con.Height = Convert.ToInt32(System.Convert.ToSingle(mytag[1]) * newy);//高度con.Left = Convert.ToInt32(System.Convert.ToSingle(mytag[2]) * newx);//左边距con.Top = Convert.ToInt32(System.Convert.ToSingle(mytag[3]) * newy);//顶边距Single currentSize = System.Convert.ToSingle(mytag[4]) * newy;//字体大小con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);if (con.Controls.Count > 0){setControls(newx, newy, con);}}}}public Form1(){InitializeComponent();x = this.Width;y = this.Height;setTag(this);}private void Form1_Resize(object sender, EventArgs e){float newx = (this.Width) / x;float newy = (this.Height) / y;setControls(newx, newx, this);}#endregion
3.关于Form不用的控件(按错)系统自动生成的代码如pictureBox_clicked 等怎么删除
点击控件-找到控件的事件-全选-删除
/或者 删除已经删除控件的代码,可以在编译生成指向Error时删除掉与这个控件相关的代码
4.picturebox各种使用:
PictureBox不是容器控件,所以他没有AutoScrollMinSize和AutoScrollPosition两个属性,所以不能直接设置,有3个方案:1)改为在Panel控件中画:
然后通过设置AutoScrollMinSize属性,设置滚动条的滚动范围,然后滚动的时候刷新图即可(注意此时绘制使用的X,Y坐标,要加上滚动条的滚动值)。
2)自己在PictureBox右边和下面添加两个滚动条。
3)在内存位图上画,然后把位图拷贝到PictureBox控件的Image属性内。
picturebox使用滚动条:
将picturebox放到Panel上,并设置以下属性。
1.panel的AutoScroll设置为ture;
2.picturebox的SizeMode设置为AutoSize;
3.picturebox的Dock设置为None.
4.picturebox的Anchor设置为上,左停靠。
5.两个窗体传值
Form2(子窗体)
Form1(主窗体)
功能是:
首先Form1窗体内有初始定义好的GDI图形(xy轴,间隔,栅格点等等)
窗体一中的菜单栏设置打开Form2窗体——>Form2窗体改变textbox或者复选框checkbox的值,并将值传递给form1进行属性的修改
FORM1内写:
<首先是初值的赋值>
static Graphics g;
public int axis_x = 50;//用户定义x坐标轴间距(初始x间距为50)
public int axis_y = 60;//用户定义y坐标轴间距(初始y间距为60)
public int axisLine = 8;//坐标轴的线高
public int grid = 50;//栅格间距
public int grid_visiable = 1;//显示栅格
int pic_height = 1500;
int pic_width = 2000;
static bool flash = false;
private void pictureboxSet()
{
pictureBox2.Height = pic_height;
pictureBox2.Width = pic_width;
}
private void pictureBox2_Paint(object sender, PaintEventArgs e){g = e.Graphics;//画板Pen p = new Pen(Color.Black, 2);if (flash){g = e.Graphics;g.Clear(Color.White);DrawGrid(e);flash = false;}else{DrawGrid(e);}}
private void DrawGrid(PaintEventArgs e)//PaintEventArgs e{pictureboxSet();g = e.Graphics;//实例化GraphicsBrush brush = new SolidBrush(Color.Black);Pen pen = new Pen(Color.Black, 2);Font font = new Font(Control.DefaultFont, FontStyle.Regular);SysSetting sysset = new SysSetting();int row = pic_height / axis_y;int colums = pic_width / axis_x;for (int i = 0; i < colums; i++)//画x轴{PointF pointF = new PointF(i * pic_width / colums, 0);string s = Convert.ToString(i * axis_x);int x1 = (i + 1) * pic_width / colums;int y1 = 0;int x2 = x1;int y2 = axisLine;g.DrawLine(pen, x1, y1, x2, y2);//初始坐标轴轴线的高度为8if (i % 1 == 0){g.DrawString(s, font, brush, pointF);}}for (int i = 0; i < row; i++)//画y轴{PointF pointF = new PointF(0, i * pic_height / row);string s = Convert.ToString(i * axis_y);int x1 = 0;int x2 = axisLine;int y1 = (i + 1) * axis_y;int y2 = y1;g.DrawLine(pen, x1, y1, x2, y2);if (i % 1 == 0){g.DrawString(s, font, brush, pointF);}}if(grid_visiable==1){for (int i = 0; i < pictureBox2.Width / grid; i++)//画栅格点{for (int j = 0; j < pictureBox2.Height / grid; j++){PointF pointF = new PointF((i + 1) * grid, (j + 1) * grid);g.DrawEllipse(pen, (i + 1) * grid, (j + 1) * grid, 2, 2);}}}}
<设置按钮————-按下设置按钮打开Form2>
private void 设置ToolStripMenuItem_Click(object sender, EventArgs e){SysSetting SysSet = new SysSetting();SysSet.ShowDialog(this);//传值窗口}
public void GetMessage(string[] str){MessageBox.Show("设置完成");pic_width = Convert.ToInt32(str[0]);pic_height = Convert.ToInt32(str[1]);grid = Convert.ToInt32(str[2]);grid_visiable = Convert.ToInt32(str[3]);axis_x = Convert.ToInt32(str[4]);axis_y = Convert.ToInt32(str[5]);flash = true;pictureBox2.Refresh();//刷新picturebox2的工作区并重绘制}
#region 窗口传递textbox及checkbox的值string str;private string GetMessage(Control con)//textbox获取信息{try{if (con is TextBox && con.Text != null){str = con.Text.ToString();}else{str = "0";}}catch (Exception ex){MessageBox.Show(ex.ToString());}return str;}public string[] conSet = new string[7];private void button1_Click(object sender, EventArgs e){Form1 form1 = (Form1)this.Owner;conSet[0]=GetMessage(textBox1);conSet[1] = GetMessage(textBox2);conSet[2] = GetMessage(textBox3);if (checkBox1.Checked == true){ conSet[3] = "1"; }else { conSet[3] = "0"; }conSet[4]= GetMessage(textBox5);conSet[5] = GetMessage(textBox6);conSet[6] = GetMessage(textBox4);form1.GetMessage(conSet);this.Close();}#endregion
