winform制作小工具的技巧

时间:2022-03-09 09:22:15

标签:

一、窗体绘制的常用设置

窗体的设置应当在窗体构造函数中InitializeComponent()方法前执行

public frmMain() { this.StartPosition = FormStartPosition.CenterScreen;//窗体居中显示 this.MaximizeBox = false;//不显示最大化按钮 this.FormBorderStyle = FormBorderStyle.FixedSingle;//禁止放大缩小 InitializeComponent(); } 二、winform文本框全选功能

Control_ControlAdded事件在InitializeComponent()调用之前注册

public frmMain() { this.ControlAdded += new System.Windows.Forms.ControlEventHandler(this.Control_ControlAdded); InitializeComponent(); } private void Control_ControlAdded(object sender, ControlEventArgs e) { //使“未来”生效 e.Control.ControlAdded += new System.Windows.Forms.ControlEventHandler(this.Control_ControlAdded); //使“子孙”生效 foreach (Control c in e.Control.Controls) { Control_ControlAdded(sender, new ControlEventArgs(c)); } //使“过去”生效 TextBox textBox = e.Control as TextBox; if (textBox != null) { textBox.KeyPress += TextBox_KeyPress; } } private void TextBox_KeyPress(object sender, KeyPressEventArgs e) { TextBox textBox = sender as TextBox; if (textBox == null) return; if (e.KeyChar == (char)1) { textBox.SelectAll(); e.Handled = true; } } 三、设置一个显示日志的文本框

首先在页面中放置一个文本框,设置Multiline=true后拖动到合适大小 然后在加载事件中进行设置

private static int _maxLogmsgTextLength = 10000;//日志框最大输入 private void frmMain_Load(object sender, EventArgs e) { this.txtLogMsg.Multiline = true;//多选, 一般在界面中就设置了 this.txtLogMsg.ScrollBars = ScrollBars.Vertical;//日志输出显示纵向滚动条 this.txtLogMsg.ReadOnly = true; //输出日志只读 this.txtLogMsg.TextChanged += txtLogMsg_TextChanged;//注册改变事件 int.TryParse(System.Configuration.ConfigurationManager.AppSettings["MAX_LOGMSG_TEXT_LENGTH"], out _maxLogmsgTextLength);//优先使用配置文件配置的值 } //文本框事件 使追加日志后滚动光标到末尾 void txtLogMsg_TextChanged(object sender, EventArgs e) { txtLogMsg.SelectionStart = txtLogMsg.Text.Length + 10;//设置选中文字的开始位置为文本框的文字的长度,如果超过了文本长度,则默认为文本的最后。 txtLogMsg.SelectionLength = 0;//设置被选中文字的长度为0(将光标移动到文字最后) txtLogMsg.ScrollToCaret();//将滚动条移动到光标位置 } //追加日志方法 在非UI线程中直接AppendText调试会异常 private void AppendLogMsg(string msg) { //在UI线程中执行 txtLogMsg.BeginInvoke(new Action(() => { txtLogMsg.AppendText(msg); txtLogMsg.AppendText(Environment.NewLine);//追加换行符 })); } 四、开启一个线程执行任务

避免界面卡死

var askThread=new Thread(() => { //TODO //AppendLogMsg("添加日志,调试时不会报错~~~"); } askThread.Start(); //.NET Framework 4.5+ //Task.Run(()=>{ // //TODO //}) 五、打开图片选择对话框

默认为多选,返回选择的文件路径集合,可使用FirstOrDefault()方法判断是否选择了文件

private List<string> OpenImagesDialog(bool isMulti = true) { var openFileDialog = new OpenFileDialog(); const string imgExts = "图像文件 (*.bmp;*.ico;*.gif;*.jpeg;*.jpg;*.png)|*.bmp;*.ico;*.gif;*.jpeg;*.jpg;*.png"; openFileDialog.Filter = imgExts; openFileDialog.Multiselect = isMulti; openFileDialog.RestoreDirectory = true; openFileDialog.FilterIndex = 1; var result = new List<string>(); if (openFileDialog.ShowDialog() == DialogResult.OK) { result.AddRange(openFileDialog.FileNames); } return result; } 六、复制文件到指定目录