none
C# 中关于激发一个button控件的可见性 RRS feed

  • 问题

  •  public Form1()
        {
          InitializeComponent();
          this.buttonsure.Enabled = false ;
          this.textBoxName.Tag = false;
          this.textBoxID.Tag = false;
          this.textBoxPhone.Tag = false;
          this.textBoxName.Validating += new CancelEventHandler(textBoxName_Validating);
          this.textBoxID.Validating += new CancelEventHandler(textBoxID_Validating);
          this.textBoxPhone.Validating += new CancelEventHandler(textBoxPhone_Validating);
        }
        //检测姓名
    
        private void textBoxName_Validating(object sender, CancelEventArgs e)
        {
          TextBox tb = (TextBox)sender;//多文本框使用该方法
          Regex name = new Regex("^[\u4e00-\u9fa5]{0,}$");
          if (name.IsMatch(tb.Text.Trim ()))
          {
            linkLabelName.Visible = false;
            tb.Tag = true;
          }
    
          else
          {
            linkLabelName.Visible = true;
            tb.Tag = false;
          }
          ValidateOK();
        }
        //检测ID
        private void textBoxID_Validating(object sender, CancelEventArgs e)
        {
          TextBox tb = (TextBox)sender;
          Regex id = new Regex(@"^\d{15}|\d{18}$");
          if (id.IsMatch(tb.Text.Trim ()))
          {
            linkLabelID.Visible = false;
            tb.Tag = true;
          }
    
          else
          {
            linkLabelID.Visible = true;
            tb.Tag = false;
          }
          ValidateOK();
        }
    
        //检测电话
    
    
        private void textBoxPhone_Validating(object sender, CancelEventArgs e)
        {
          TextBox tb = (TextBox)sender;
          Regex phone=new Regex (@"^(\d{3}-\d{8}|\d{4}-\d{7}|\d{11})$");
          if(phone.IsMatch (tb.Text.Trim () ))
          {
            linkLabelPhone.Visible =false;
            tb .Tag =true;
          }
    
          else
          {
             linkLabelPhone.Visible =true;
             tb .Tag =false;
          }
          ValidateOK();
        }
        private void textBoxName_TextChanged(object sender, EventArgs e)
        {
    
          TextBox tb = (TextBox)sender;
          Regex name = new Regex("^[\u4e00-\u9fa5]{0,}$");
          Regex id = new Regex(@"^\d{15}|\d{18}$");
          Regex phone = new Regex(@"^(\d{3}-\d{8}|\d{4}-\d{7}|\d{11})$");
          if (name.IsMatch(tb.Text.Trim()) && id.IsMatch(tb.Text.Trim()) && phone.IsMatch(tb.Text.Trim()))
          {
    
            tb.Tag = true;
            ValidateOK();
          }
          else
          {
            tb.Tag = false;
          }
        }
        private void ValidateOK()
        {
         
          this.buttonsure.Enabled = ((bool)(this.textBoxName.Tag) &&
                      (bool)(this.textBoxID.Tag) &&
                      (bool)(this.textBoxPhone.Tag));
        }
    
       
        private void buttonsure_Click(object sender, EventArgs e)
        {
          MessageBox.Show("提交");
        }
    
        private void linkLabelPicture_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
          OpenFileDialog open = new OpenFileDialog();
          pictureBox2.ImageLocation = open.FileName;
        }
    注意我设置 this.buttonsure.Enabled = false ;
    问题 //当我对代码进行验证时(输入正确的信息) this.buttonsure.Enabled仍然是不可见的,如果此时点击某个其他按钮 this.buttonsure.Enabled
    
    就变得可见 麻烦问下问题出在哪?
    hello world
    2011年4月23日 13:44

答案

  • Validating事件是当控件失去焦点的时候就会发生,当你点击某个其他按钮的时候由于焦点转移到该按钮上,导致textbotx的Validating事件激发,继而执行了ValidateOK()所以this.buttonsure.Enabled==true.
    • 已标记为答案 Aspen VJ 2011年5月3日 1:51
    2011年4月24日 17:00

全部回复

  • 你好

    或者你可以嘗試看看以下的Code 能不能return true? 

      private void ValidateOK()
      {
       E.g.
    		bool t = ((bool)(this.textBoxName.Tag) &&
             (bool)(this.textBoxID.Tag) &&
             (bool)(this.textBoxPhone.Tag));

    		MessageBox.Show(t.ToString());
    MessageBox.Show(((bool)(this.textBoxName.Tag)).ToString());
    MessageBox.Show(((bool)(this.textBoxID.Tag)).ToString());
    MessageBox.Show(((bool)(this.textBoxPhone.Tag)).ToString());

    this.buttonsure.Enabled = ((bool)(this.textBoxName.Tag) && (bool)(this.textBoxID.Tag) && (bool)(this.textBoxPhone.Tag)); }
    Please correct me if my concept is wrong


    Chi
    2011年4月24日 8:01
    版主
  • Validating事件是当控件失去焦点的时候就会发生,当你点击某个其他按钮的时候由于焦点转移到该按钮上,导致textbotx的Validating事件激发,继而执行了ValidateOK()所以this.buttonsure.Enabled==true.
    • 已标记为答案 Aspen VJ 2011年5月3日 1:51
    2011年4月24日 17:00