gpt4 book ai didi

c# - 每次更改 ComboBox(使用 SelectedIndexChanged)时,如果打开,则以其他形式显示具有新值的消息

转载 作者:太空宇宙 更新时间:2023-11-03 13:30:51 25 4
gpt4 key购买 nike

我想从 Form1 组合框中获取所选语言并启用其他表单来查看该语言。组合框有大约 20 种语言,所以是的,您可以说很多!我有一个名为 ComboBoxLang_SelectedIndexChanged 的​​方法(在更改组合框中的语言时发生):

// Works fine in Form1.cs
private void ComboBoxLang_SelectedIndexChanged(object sender, EventArgs e)
{
string selectedItem = this.comboBoxLang.GetItemText(this.comboBoxLang.SelectedItem);

comboBox2.Items.Clear();

if (selectedItem == "English")
{
ToEnglish();
}

else if (selectedItem == "French")
{
ToFrench();
}

// And so on...
}

目前,为了测试它是否有效,我只想以另一种形式显示所选语言的消息。我已经研究并尝试了多种方法,但显然我在某处出错了!我认为可能使用 getset 方法最有用,但我真的不确定。我希望 MessageBox 说“英语”或任何选择。

再举个例子,我知道用

Form1 f1 = new Form1();

...在第二种试图检索值的形式中是不正确的,因为它只是获取硬编码文本,而我只想要已输入的实际值。所以我不确定我是否应该使用

private Form1 f1;

...改为第二种形式。我真的很困惑。

我知道这是一个常见问题,但我似乎找不到解决方案。

最佳答案

让我们通过观察者来做

public static class LanguageChangeObserver
{
private static object _lock = new object();
public delegate void LanguageHandler(string lang);

public static event LanguageHandler LanguageChanged;

public static void Notify(string lang)
{
lock (_lock)
{
if (LanguageChanged != null)
LanguageChanged(lang);
}
}

}

这样,所有表单都可以订阅事件 LanguageChanged 并且表单 Form1 可以“通知” - 所有其他表单都将获得信息

编辑

观察者模式是指您拥有“观察”其他类中变化的类。在 .net 中,观察者是使用事件和委托(delegate)实现的。听起来很可怕,但实际上这很简单。您订阅类(class)事件并观察您想要观察的变化。在这种情况下,当 Form1 中的语言发生变化时,您应该调用 LanguageChangeObserver.Notify(...)。其他表单在创建时应订阅 LanguageChanged 事件。

LanguageChangeObserver.LanguageChanged += <form_method_with_signature_of_LanguageHandler>; 

如果表单已关闭并即将被处理,您应该取消订阅观察,因为有线和非无线处理程序是 .Net 中内存泄漏的常见方法

LanguageChangeObserver.LanguageChanged -= <form_method_with_signature_of_LanguageHandler>; 

Lock 将同步您的代码并确保您一次更改一种语言。我希望这会有所帮助。

关于c# - 每次更改 ComboBox(使用 SelectedIndexChanged)时,如果打开,则以其他形式显示具有新值的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20620796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com