【机房重构】——小知识

本文介绍C#中窗体操作的高级技巧,包括阻止窗体关闭、修改数据库字段、设置文本框字符限制、计算时间跨度、清空控件、填充Panel控件、调整窗体位置等。通过具体代码示例,帮助读者掌握实用的数据处理和界面控制方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.如何点击右上角的“关闭”,再执行一次语句后选择关闭。

        protected override void WndProc(ref Message m)
        {
            const int WM_SYSCOMMAND=0x0112;
            const int SC_CLOSE=0xF060;
            if (m.Msg == WM_SYSCOMMAND && ((int)m.WParam == SC_CLOSE))
            {
                //加入想要的处理逻辑
                    
                return;//阻止窗体关闭
                
            }
            base.WndProc(ref m);
        }

2。

原因在于数据的长度不符合才造成的。

解决办法当然有多种,一是修改数据库字段大小;二是加强数据强壮性,严格的输入判断。
目前是采用修改数据的方法:alter table1 alter column caller varchar(50)

3.设置字符限制

只能输入数字

private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
   {
    if(e.KeyChar!=8 && !Char.IsDigit(e.KeyChar))
    {
      e.Handled = true;
    }
   }

//或者

            if ((e.KeyChar <= 48 || e.KeyChar >=57) && (e.KeyChar != 8) && (e.KeyChar != 46))
            {
              e.Handled = true;
            }
================48代表0,57代表9,8代表空格,46代表小数点

//或者


            if ((e.KeyChar > '9' || e.KeyChar < '0') && (e.KeyChar != 8))
            {
                e.Handled = true;
            }
        
private void textBox1_Validating(object sender, CancelEventArgs e) 
{ 
    const string pattern = @"^\d+\.?\d+$"; 
    string content = ((TextBox)sender).Text; 

    if (!(Regex.IsMatch(content, pattern))) 
    { 
        errorProvider1.SetError((Control)sender, "只能输入数字!"); 
        e.Cancel = true; 
    } 
    else 
        errorProvider1.SetError((Control)sender, null); 
    }

只能输入汉字


private void txtName_KeyPress(object sender, KeyPressEventArgs e)
{
      Regex rg = new Regex("^[\u4e00-\u9fa5\b]$"); //\b是退格键
      if (!rg.IsMatch(e.KeyChar.ToString()))
      {
           e.Handled = true;
      }
}


//或者

private void txtName_KeyPress(object sender, KeyPressEventArgs e)
{
      Regex rg = new Regex("^[\u4e00-\u9fa5]$");
      if (!rg.IsMatch(e.KeyChar.ToString()) && e.KeyChar != '\b')
      {
           e.Handled = true;
      }
}

 只能输入字母

private void txtOldPwd_KeyPress(object sender, KeyPressEventArgs e)
{
     if ((e.KeyChar >= 'a' && e.KeyChar <= 'z') || (e.KeyChar >= 'A' && e.KeyChar <= 'Z'))
     {
            e.Handled = false;
     }
     else
     {
            e.Handled = true;
     }        
}

4。时间跨度结构:一个表示时间间隔

TimeSpan midtime = DateTime.Parse(txtDownTime.Text) - DateTime.Parse(txtUpTime.Text);
//时间间隔

5.清空

 #region 清空
        private void btnClean_Click(object sender, EventArgs e)
        {
            Control a = new Control();
            this.Clear(a);
        }

        public void Clear(Control ctrl)
        {
            foreach (Control c in this.Controls)
            {
                if (c is TextBox)
                {
                    c.Text = "";
                }
                if (c is ComboBox)
                {
                    //c.Text = "";
                    ComboBox cb = c as ComboBox;
                    cb.SelectedIndex = -1;
                }
                dataGridView1.DataSource = null;
            }
        }
#endregion

6.填充整个Panel

        private void lblModify_Click(object sender, EventArgs e)
        {
            FrmModify frm = new FrmModify();
            frm.FormBorderStyle = FormBorderStyle.None;
            frm.Dock = DockStyle.Fill;
            frm.TopLevel = false;
            this.panel4.Controls.Clear();
            this.panel4.Controls.Add(frm);
            frm.Show();
        }

7.窗体位置

        protected override void OnResize(EventArgs e)
        {
            base.OnResize(e);
            int x = (int)(0.5 * (this.Width - panel1.Width));
            int y = (int)(0.5 * (this.Height- panel1.Height));
            //int y = panel1.Location.Y;
            panel1.Location = new System.Drawing.Point(x, y);
        }

//或者


Rectangle rect=SystemInformation.WorkingArea;
int x=(rect.Width - frm.Size.Width)/2;
int y= (rect.Height - frm.Size.Height)/2;
frm.StartPosition=FormStartPostion.Manual;
frm.Location=(Point)new Size(x,y);
Rectangle rect = SystemInformation.WorkingArea;

panel1.Location = new Point(Convert.ToInt32 ((rect.Width-panel1.Width)*0.5), Convert.ToInt32((rect.Height - panel1.Height) * 0.5));

panel1.Height = Convert.ToInt32(rect.Height * 1.2);
panel1.Width = Convert.ToInt32(rect.Width * 1.2);

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值