私は C# が初めてで、Windows フォームが相互に通信できるようにしたいと考えています。C# でバブリングをググったのですが、あまり役に立ちませんでした。バブリングを学ぶ良い方法は何ですか?
編集: ユーザーが [編集] -> [設定] をクリックしたときに表示/作成されるオプション フォームが必要です。次に、ユーザーがオプション フォームで変更した設定をメイン フォームに中継する必要があります。
私は C# が初めてで、Windows フォームが相互に通信できるようにしたいと考えています。C# でバブリングをググったのですが、あまり役に立ちませんでした。バブリングを学ぶ良い方法は何ですか?
編集: ユーザーが [編集] -> [設定] をクリックしたときに表示/作成されるオプション フォームが必要です。次に、ユーザーがオプション フォームで変更した設定をメイン フォームに中継する必要があります。
2 つのアプローチ:
設定フォームにプロパティを配置し、ユーザーが [OK] をクリックしたときにメイン フォームからプロパティにアクセスします。
if (preferenceForm.ShowDialog() == DialogResult.OK)
{
this.Color = preferenceForm.UserSelectedColor;
//etc...
}
メインフォームから優先フォームをデリゲートに送信し、適切な変更を加えて優先フォームにそれを呼び出させます。
class FormSettings
{
object Color {get, set}
}
class MainForm
{
...
void ChangeSettings(FormSettings newSettings)
{ ... }
void EditPreferences_Click(...)
{
...
EditPreferencesForm editPreferences = new EditPreferencesForm(this.ChangeSettings)
editPreferences.ShowDialog();
}
}
class EditPreferencesForm
{
...
ChangeSettingsDelegate changeSettings;
FormSettings formSettings;
void OkButton_Click(...)
{
changeSettings(formSettings);
}
}
あなたは多くを述べていませんが、メインフォームは Edit->Preferences メニューを含むフォームでもありますか? もしそうなら、あなたはすでにコードの正しいポイントにいます
// This is the event handler in the main form
private void mnuEditPreferencesClicked...
{
FrmPreferences frmPreferences = new FrmPreferences();
frmPreferences.ShowDialog(this);
// Preferences saved, implement changes to main form here
}
設定フォームがメイン フォームから生成されていない場合は、設定フォームが閉じられたときにイベントを発生させ、メイン フォームがその方法でイベントを処理するようにします。