C# 示例程序开发小结

程序界面截图
程序说明:光标在程序主图上移动,左侧上方textbox可显示当前光标坐标,每点击一次可在左侧listview上显示点击序号,以及坐标值

1 Form的版面布局

要使放大之后控件之间的相对距离不变,则需要调整每个控件的anchor(top left right button),使之达到form放大后,控件之间的相对距离不变 。

2 字体

要使用系统附带的字体则需要

FrontDialog fd = new FrontDialog();
fd.ShowDialog().ToString();

要控制某个控件的text字体,则使用控件属性

textBox1.Font = fd.Font;

3 访问comboBox中的项

要使下拉菜单的项在其他控件text中显示,则用

comboBox1.SelectedItem.ToString();

4 捕获鼠标的坐标

有三种,都是相对于左上角的坐标

  • 鼠标相对于该控件的位置

    Point formPoint = 控件名.PointToClient( Control.MousePosition);
  • 鼠标相对于该form的位置

    Point formPoint = this.PointToClient( Control .MousePosition);
  • 鼠标对于屏幕的位置

    Point screenPoint = Control.MousePosition;

    注意要细分X,Y坐标,可用formPoint的X,Y属性。

5 listview

要把信息显示在listview的不同列上

this.listView1.Items.Add(new ListViewItem( new string []{ (listView1.Items.Count + 1).ToString(), (formPoint.X * xrat).ToString(), (formPoint.Y * yrat).ToString() }));//第一列自增,紧接着第二列内容,第三列内容。

6 限制text的输入范围,只能输入整数,使用正则表达式

using System.Text.RegularExpressions;

 string s = @"^\d+$";
 if( Regex.IsMatch(str1,s))//str1 与s比较,返回一个bool值

7 控件被触发的先后顺序可能导致程序异常

比如:比例button和image_enter,原因是参数未初始化就开始使用。解决方法是在form1设置一个常量

public partial class Form1 : Form
{ 
   public int xrat = 1,yrat = 1;
   //...
}

8 要用一个窗口中的控件去控制另一个窗口中的控件,用委托实现相互传值

//form1中的代码
namespace homework
{  
    public delegate string GetText();
    public delegate void SetText(string text);

    public partial class Form1 : Form
    {
        public int xrat = 1, yrat = 1;
        Form2 f2;
        private void SetTextValue(string text)
        {
            textBox1.Text = text;
        }
        private string GetTextValue()
        {
            return textBox1.Text;
        }
        //...
         private void button2_Click(object sender, EventArgs e)
        {
            //通过委托来进行两个窗体的互操作
           f2 = new Form2 ( this.GetTextValue, this .SetTextValue);

    }
}

//form2中的代码

namespace homework
{
    public partial class Form2 : Form
    { private GetText getTextValue = null;
        private SetText setTextValue= null;

        private Form1 f1 = null;
        public Form2(GetText getText,SetText setText)
        {
            InitializeComponent();
            this.getTextValue = getText;
            this.setTextValue = setText;

        }
        //...
     }
 }

然后在两个窗口中要用到对方控件的值,则用:

 private void button2_Click(object sender, EventArgs e)
        {
            //通过委托来进行两个窗体的互操作
           f2 = new Form2(this.GetTextValue, this.SetTextValue);

            //通过给子窗体传递主窗体的对象或值来互操作
            f2.ShowDialog();
            Point formPoint = Image1.PointToClient(Control.MousePosition);

            string str1 =f2.textBox3.Text;
            string str2 =f2.textBox4.Text;
            //...
         }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值