1

MainForm.csという名前のWindowsフォームと、それぞれUserControlRed.csUserControlBlue.csという2つのユーザーコントロールがあります。ucrであるUserControlRedのオブジェクトが作成され、MainFormpanel1.Controls.Add(ucr);のデフォルトコンストラクターを使用してMainFormのpanel1に追加されます。

次に、次のようなUIがあります:MainForm

ここに画像の説明を入力してください

注: ucbであるUserControlBlueのインスタンスは、UserControlRedのクリックボタンイベントを使用して作成されます。次のようにコーディングします。

private void CreateUCBbtn_Click(object sender, EventArgs e)
{
     MainForm f1 = new MainForm();
     f1 = (MainForm)this.Parent.Parent;
     f1.AddUCBlueIntoPanel2();
}

ここで、ユーザーが[UCBラベルの変更]ボタンをクリックした後、UserControlBlueのラベルは、UserControlRedのテキストボックスに入力された内容に応じて変更されます。だから、私はここで2つの質問があります:

  1. 上記の私のメモに関して、このようにそれを行うのは安全ですか?
  2. テキストボックスの値をUserControlRedからUserControlBlueのラベルに渡すための最良の方法は何ですか?

別の注意:私はまだOOP、特にC#とwinformsの初心者です。たぶん誰かが私に精通するのに良いサイトを提案することができますか?

4

2 に答える 2

2

UserControlBlueに、文字列をパラメーターとして受け取り、それをラベルのテキストに割り当てるパブリックメソッド(関数)を追加できます。次に、[UCBラベルの変更]ボタンのクリックハンドラーからそのメソッドを呼び出すことができます。

これを行うのは安全なはずです。

于 2013-01-27T15:57:03.917 に答える
0

単一責任の原則のために、これは臭いコードになります。両方の親は、そのパネルを埋める方法のロジックを知っている必要があります。赤と青のパネルは、その親で特定のアクションをトリガーする方法のみを知っている必要がありますが、実際の実装は親のロジックに格納されています。

現在のように、赤いパネルは、赤いパネル自体に依存しないロジックを実装しています。

private void CreateUCBbtn_Click(object sender, EventArgs e)
{
     var textBoxContent = this.MyTextBox.Text;
     var parent = this.Parent as MainForm;
     parent.AddBlueIntoPanel2(textBoxContent);
}
于 2013-01-27T16:01:53.397 に答える