通过form2中的命令在form1上锁定和解锁文本框

时间:2014-05-07 09:36:05

标签: c# textbox

我有两种形式:

  Form1
  Form2

每当我在checkBox1上选中/取消选中CheckBox Form2时,我想更新textbox1.Readonly上的Form1。如果 <{em> textbox1checkbox1都在 相同的表单 上,那就很容易了:

  private void checkBox1_CheckedChanged(object sender, EventArgs e) {
    textbox1.Readonly = checkBox1.Checked;
  }

textbox1checkbox1 不同 Forms时,我该怎么办?

3 个答案:

答案 0 :(得分:2)

你可以这样说:

public partial class Form1: Form {
  ...

  // textBox1 is private (we can't access in from Form2) 
  // so we'd rather create a public property
  // in order to have an access to textBox1.Readonly
  public Boolean IsLocked {
    get {
      return textBox1.Readonly;
    }
    set {
      textBox1.Readonly = value;
    }
  }
}

...

public partial class Form2: Form {
  ...

  private void checkBox1_CheckedChanged(object sender, EventArgs e) {
    // When checkBox1 checked state changed,
    // let's find out all Form1 instances and update their IsLocked state
    foreach (Form fm in Application.OpenForms) {
      Form1 f = fm as Form1;

      if (!Object.RefrenceEquals(f, null))
        f.IsLocked = checkBox1.Checked;
    }  

  }
}

答案 1 :(得分:1)

您应该使用事件和代理。

在Form2上,我们创建了一个委托和事件

public delegate void OnCheckedEventHandler(bool checkState);
public event OnCheckedEventHandler onCheckboxChecked;

public void checkBox1_Checked(object sender, EventArgs e)
{
    if (onCheckboxChecked != null)
        onCheckboxChecked(checkBox1.Checked);
}

在Form1上,我们意识到了这个事件:

void showForm2()
{
    Form2 f2 = new Form2();
    f2.onCheckboxChecked += onCheckboxChecked;
    f2.Show();
}

public void onCheckboxChecked(bool checkState)
{
    textBox1.ReadOnly = checkState;
}

答案 2 :(得分:1)

更简单,更灵活

Form1中:

public class Form1 : System.Windows.Forms.Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
        {
        Form2 tmpFrm = new Form2();
        tmpFrm.txtboxToSetReadOnly = this.txtMyTextBox; //send the reference of the textbox you want to update
        tmpFrm.ShowDialog(); // tmpFrm.Show();
    }
}

FOrm 2:

public class Form2 : System.Windows.Forms.Form
{
    public Form2()
    {
        InitializeComponent();
    }

    TextBox _txtboxToSetReadOnly = null;
    public TextBox txtboxToSetReadOnly
    {
        set{ this._txtboxToSetReadOnly = value; }
        get {return this._txtboxToSetReadOnly;}
    }

    private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
        if( this._txtboxToSetReadOnly != null)  this._txtboxToSetReadOnly.ReadOnly = checkbox1.Checked;
        /*
         or the otherway 
        if( this._txtboxToSetReadOnly != null) this._txtboxToSetReadOnly.ReadOnly = !checkbox1.Checked;
        */
    }
}