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;//实例化Graphics
Brush 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);//初始坐标轴轴线的高度为8
if (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