0

非常に多くのテキスト ボックスと約 5 つのボタンがあります。テキスト ボックスをクリアし、5 つのボタンすべてで繰り返される他のことを実行したいと考えています。新しいクラスを作成し、繰り返されるすべてのコードを配置して、関数またはメソッドを介してコードを再利用できるようにしたいと考えています。しかし、問題は、新しいクラスを作成すると、テキスト ボックスが認識されることです。たとえば、新しいクラスで言うtxtFirstName.Clear()と、新しいクラスだと認識されません。回避策はありますか?

4

3 に答える 3

2

常に再利用する必要のあるコードの静的メソッドを使用してUtilityクラスを作成します。例としては、コンテナー参照を渡すことができ、そのコンテナーまたは子コンテナー内のすべてのテキストボックスをクリアする(または読み取り専用にする)メソッドがあります。以下のコードを参照してください:

public class utility
{

public static void MyTextBoxes(Control container, string CommandName){

        foreach (Control c in container.Controls){
        MyTextBoxes(c, CommandName);        

        if(c is TextBox){ 
          switch (CommandName)
          {
            case "Clear":
                c.Text = "";   
                break;
            case "ReadOnly":
                ((TextBox)c).ReadOnly = true;
                break;
          }  

        }   
    }    
}

Formコードで、次のようなメソッドを呼び出します。

utility.MyTextBoxes(this, "Clear");
utility.MyTextBoxes(this, "ReadOnly");

このように、同じ方法を使用して、コマンドを文字列として指定することにより、さまざまなコマンドを実行しました。必要に応じて、さまざまなメソッドでさまざまなコマンドを実行することができます(コードを読みやすくするため)。これにより、ユーティリティメソッドを作成する方法がわかったと思います。

于 2013-02-07T21:23:14.677 に答える
0

クラスの新しいメソッドにテキストボックス参照を渡すことができます。

public void ClearTextbox(Textbox textBoxToClear) { textBoxToClear.Clear; }

テキストボックスを新しいメソッドに渡すだけです。

または、一連のテキストボックスをクリアするには:

public void ClearTextBoxes(IEnumerable<Textbox> textBoxesToClear) { foreach(Textbox textbox in textBoxesToClear) {textbox.Clear();} }
于 2013-02-07T21:13:44.207 に答える
0

これを実現するには、現在のフォームをパラメータとして新しいクラスのコンストラクタに渡します。

public class MyNewClass
{
    Form1 _form;

    public MyNewClass(Form1 form)
    {
        _form = form;
    }

    public void ClearTextBoxes()
    {
        _form.txtFirstName.Clear();
        //Clear the rest
    }
}
于 2013-02-07T21:14:35.923 に答える