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

2024-02-16

我想从 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...
}

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

另一个例子,我知道使用

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可以“通知”-所有其他形式都会获取信息

Edit

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

LanguageChangeObserver.LanguageChanged += <form_method_with_signature_of_LanguageHandler>; 

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

LanguageChangeObserver.LanguageChanged -= <form_method_with_signature_of_LanguageHandler>; 

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每次 ComboBox 更改(使用 SelectedIndexChanged)时,如果打开,则以其他形式显示新值的消息 的相关文章

  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • 如何在加载.NET WinForm应用程序user.config文件时捕获异常?

    有时 在使用默认配置系统的 NET 2 0 WinForm 桌面应用程序中 user config文件将被损坏并且无法再加载 当配置系统尝试加载它时 它会抛出一个System Xml XmlException 抛开 为什么文件首先被损坏 的
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看

随机推荐

  • 如何在 Jenkins 中手动安装插件

    从更新中心安装插件会导致 检查互联网连接 无法连接到http www google com http www google com 也许您需要配置 HTTP 代理 部署插件失败 详细信息 hudson util IOException2 无
  • 使用 HtmlService HtmlTemplate 时设置 Google Apps 脚本 showModalDialog 的高度

    我目前正在将使用已弃用的 UI 服务的 Google Apps 脚本更改为 HtmlService 我使用以下代码创建了一个模式对话 在电子表格容器绑定脚本中 var htmlTemplate HtmlService createTempl
  • Angular 导出 Excel 客户端

    我正在使用 Angular v4 我想如何从组件中的对象开始构建 Excel 电子表格 我需要点击按钮下载 Excel 文件 并且我必须在客户端执行此操作 我有一个由数组组成的 json 文件 我需要将其传输到 Excel 文件上 可能可以
  • Strapi v4:填充时没有关系字段

    我正在尝试使用关系名称填充特定关系 categories 与 populate 参数结合使用 但它不会填充categories 当我查看架构时 我发现关系字段存在于属性对象中 但我的回复中仍然只得到非关系字段 我尝试了上面提到的所有组合St
  • 无需 Google 对话框的语音识别

    我将尝试使用带有 RecognitionListener 的语音识别 无需 Google 对话框 但不起作用 启动应用程序时只会发出蜂鸣声 我已将音频记录和互联网权限添加到清单文件中 我希望你告诉我并帮助我找到错误 我在 Log cat 上
  • 加水动画

    我正在尝试获取擦除动画以使圆圈看起来像它充满了水 我遇到了两个错误 甚至无法解决第三个错误 填错了方式 填充后重置为空 黑色 目前 我正在使用 img 标签 但我想将此效果移至body background image 并需要一些关于如何做
  • 这是使用 java 关键字“interface”的正确位置吗?

    我对 Java 相当陌生 在阅读了一些有关路径查找的信息后 我读到了有关使用空类作为 interface 对于未知的对象类型 我正在用 Java 开发一个基于医院主题的游戏 至此 用户可以搭建一个接待台和一个全科医生办公室 它们是两种不同类
  • java.lang.Thread 无法转换为 java.util.concurrent.ForkJoinWorkerThread

    我正在 Java SE 7 中使用 RecursiveTask 测试斐波那契示例http docs oracle com javase 7 docs api java util concurrent RecursiveTask html h
  • 是否可以在 CSS 中设置子字符串的样式?

    我想强调字符串的最后 3 个字符 例如 123456789 很容易将最后三个包裹起来 strong or span class 但我想知道是否可以仅使用 CSS 来完成 所以 html 会是这样的 span class mytext 123
  • 格式化 $SimpleXML->asXML() 的输出; [复制]

    这个问题在这里已经有答案了 标题基本概括了所有内容 如果我有类似的东西 来自 PHP 网站示例 xmlstr lt lt
  • 制作全幻灯片大小的 ggplot2 输出 {Xaringan}

    有没有办法让 ggplot 图表采用 xaringan 演示文稿的所有幻灯片 如果我将其导出为 png 并将其作为背景图片 我就可以做到这一点 但是直接从块输出呢 底部有一个最小的例子 解释 默认 CSS 样式为xaringan顶部和底部的
  • 在 Android 中创建自定义 ROM [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我是初级 Android 开发人员 我想通过编码而不是手动将库存 ROM 制作为定制 ROM 有没有可能做到这一点 有人请引导我走上正确的道路 我想通
  • 如何在其他模态弹出窗口上方显示模态弹出窗口

    我有一个模态弹出窗口 当我单击模态弹出窗口中的按钮时 会显示另一个模态弹出窗口 但是第二个模态弹出窗口的一些内容隐藏在第一个模态弹出窗口后面 如何使其显示在第一个模式弹出窗口上方 任何想法和建议表示赞赏 尝试设置z index您想要的弹出包
  • Javascript:如何停止点击事件排队?

    以下代码工作正常 唯一的问题是单击事件排队 例如setTimeout每次点击都会被调用 并且弹出窗口会出现多次 如何使弹出窗口仅在用户单击时出现 并确保每个弹出窗口之间的间隔为 4 秒 var showpopup 1 var check t
  • 如何将ajax添加到wordpress主题

    我有一个问题困扰了我好几天了 我正在尝试使用一个简单的 ajaxPOST 函数将数据发送到 MySQL 数据库 不是 WP 数据库 该代码位于主题中的 single post php 内 因为必须在每次发布之前检查它 ajax url li
  • 检索 pdf 时出现意外的服务器响应 (0)

    我们在使用 Amazon ec2 实例时特别遇到此错误 aws实例上的配置是Tomcat 7 Ubuntu 16 04 内存是8GB 当用户尝试查看 pdf 文件时会发生这种情况 在我们的应用程序中 我们有一项功能 用户只能在浏览器上查看
  • jQuery Mobile 输入和文本区域自定义样式

    我正在尝试设计我的 jQuery Mobile 表单输入和文本区域的样式 现在他们是这样定制的 http jquerymobile com demos 1 0b1 demos 1 0b1 docs forms forms text html
  • 在谷歌大查询中将表从一个数据集复制到另一个数据集

    我打算将一组表从一个数据集复制到同一项目中的另一个数据集 我在 Ipython 笔记本中执行代码 我使用以下代码获取要复制到变量 value 中的表名列表 list bq DataSet test TestDataset for x in
  • Android:id列表视图

    我在 xml 中声明了一个列表视图
  • 每次 ComboBox 更改(使用 SelectedIndexChanged)时,如果打开,则以其他形式显示新值的消息

    我想从 Form1 组合框中获取所选语言 并启用其他表单来查看该语言 该组合框大约有 20 种语言 所以是的 您可以说相当多的语言 我有一个名为 ComboBoxLang SelectedIndexChanged 的 方法 当组合框中的语言