0

別のクラスからメソッドを呼び出そうとしていますが、成功しません。

プログラムにCheckBoxcheckBox1があり、クリックするとcheckBox1のチェックを外したいボタンがあります。

このように I メソッドを同じファイルに入れると、すべてが機能します。

public void close()
{
  checkBox1.IsChecked=false;
}

しかし、別のクラス ファイル (クラス Close) を作成し、そこに (同じ名前空間で、必要な要素を "使用" して) 配置するとします。それを機能させる方法はありません。クラスを次のようにインスタンス化しようとしました:

 Close operation = new Close();
 operation.close();

close メソッドも静的にしようとしましたが、実際のプログラムには「非静的」(?) であるためにエラーが発生する変数がたくさんあるため、不可能でした。

MessageBox.Show("Hello");この方法でメソッドを呼び出すと機能することに気付きましたが、checkBox1 はまだ変更されていません。私に何ができる?

4

2 に答える 2

2

オブジェクト指向プログラミングの基本原則はカプセル化です。これは、クラスがクラスの内部メンバー変数のみを認識し、操作することを意味します。

あなたの場合、クラスCloseは名前が付けられた制御変数について何も知らないcheckBox1ため、メソッドclose(上記のように)は動作できません。コンパイルすらできませんでした!代わりに、メソッドcloseが Window クラスの一部である場合、コントロール変数checkbox1はウィンドウ クラスのメンバー変数であるため、期待どおりに機能します。

ただし、意図が理解できれば、ユーザー インターフェイス操作を処理するために別のクラスを作成することは避けることをお勧めします。UI 要素で動作するコードは、要素が定義されているクラスにとどまります。

于 2013-05-16T21:41:22.287 に答える
-1

は typeのCheckBox.IsChecked値を返しますbool。チェック ボックスの値を実際に変更しようとしている場合 (つまり、オンまたはオフ)、別のプロパティを使用する必要があります。

試す:

    public void close()
    {
        checkBox1.Checked = true;
    }

Closeこれは、クラスが実際にその内部にコントロールを持っていることを前提としています...あなたの質問はかなり漠然としています.WinFormsの多くのクラスでかなり一般的なメソッドであるため CheckBox、率直に言ってメソッドに近い名前を付けるのはおそらくベストプラクティスではありません..Close()

于 2013-05-16T21:45:05.607 に答える