c# - c#:如何将组合框选定值从一个表单传递到另一个表单
问题描述
我有两种形式,“FrmRunEntry”和“FrmPartNumEntry”。当我在 FrmRunEntry 表单上输入一个值时,它会显示 FrmPartNumEntry from 和一个组合框。在组合框中选择一个值后,我想按 ENTER 键并将所选值从组合框中带回 FrmRunEntry 表单上的文本框。但我无法让它工作。我的组合框和表单 Keydown 事件永远不会被触发。我的程序只是放在组合框上,按 ENTER 后什么也不做。我已经广泛搜索论坛并尝试了以下解决方案但没有成功:
如何在 C# 中将 Combobox 的选定项目从一个表单获取到另一个表单
我还尝试了其他一些不起作用的解决方案。我是一名新的 C# 程序员,我承认我对 C# 事件的工作原理没有深入的了解。我希望有人可以帮助解决这个问题并帮助我理解我做错了什么。这是我正在使用的代码:
FORM 1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HydroProgram
{
public partial class FrmRunEntry : Form
{
public string selectedPartNumber = "";
public FrmRunEntry()
{
InitializeComponent();
this.ActiveControl = TxtHydro;
TxtHydro.Focus();
}
private void FrmRunEntry_Load(object sender, EventArgs e)
{
//Text Boxes
TxtHydro.CharacterCasing = CharacterCasing.Upper;
if (!string.IsNullOrEmpty(selectedPartNumber))
{
TxtPartNum.Text = selectedPartNumber;
}
}
private void TxtHydro_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
this.Hide();
FrmPartNumEntry f = new FrmPartNumEntry();
f.ShowDialog();
}
}
}
}
FORM 2
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HydroProgram
{
public partial class FrmPartNumEntry : Form
{
public FrmPartNumEntry()
{
InitializeComponent();
this.ActiveControl = CboPartNum;
}
private void FrmPartNumEntry_Load(object sender, EventArgs e)
{
//Combo Box
CboPartNum.Location = new Point(668, 240);
CboPartNum.Size = new Size(255, 23);
CboPartNum.Focus();
CboPartNum.SelectedIndex = 1;
}
private void CboPartNum_KeyDown(object sender, KeyEventArgs e) <-- NOT BEING TRIGGERED
{
processRequest(e);
}
private void FrmPartNumEntry_KeyDown(object sender, KeyEventArgs e) <-- NOT BEING TRIGGERED
{
processRequest(e);
}
private void processRequest(KeyEventArgs e) <-- NEVER REACHED
{
if (e.KeyCode == Keys.Enter && this.ActiveControl == CboPartNum)
{
this.Hide();
FrmRunEntry f = new FrmRunEntry();
f.selectedPartNumber = Convert.ToString(CboPartNum.SelectedItem);
f.ShowDialog();
}
}
}
}
解决方案
例如,您可以重载表单的构造函数
public FrmPartNumEntry()
{
InitializeComponent();
this.ActiveControl = CboPartNum;
}
至此
public public FrmPartNumEntry(int value)
{
InitializeComponent();
this.ActiveControl = CboPartNum;
}
然后将值存储在私有变量中。然后,您可以随心所欲地使用它。如果你想传递任何东西,只需使用一个对象作为参数,然后在构造函数中强制转换它。例如
public public FrmPartNumEntry(object value)
{
InitializeComponent();
int x = (int) value;
this.ActiveControl = CboPartNum;
}
在两种形式都在运行的情况下。
假设您 form1 包含组合框,而 form2 需要它的数据然后
- 在 form1 中创建一个静态字段并将其公开。
- 在组合框中使用 textchanged 事件将值分配给静态字段
- 通过 form2 中的 form1.staticfieldname 访问。
推荐阅读
- c# - JSON.NET:如何在初始流中获取 JSON 令牌的位置,以便更好地报告错误?
- nginx - 配置 nginx 以在 Debian 10 上运行 Jitsi
- html - 如何制作外观正确的 3D 2 面旋转立方体效果?
- sql - 作为表格的值列表
- ruby - Ruby Pronto 和 Gitlab 合并请求:没有内联注释
- go - 我可以使用 OpenCensus 跟踪子调用函数吗?
- laravel - 如何在 Laravel 中自定义 OrderBy
- php - Sonata Block Bundle 中的块默认存储在哪个数据库表中?
- kubernetes - 如何删除在`mount`的输出中找不到的只读文件系统上的文件?
- azure - 是否有可能为 Azure 托管的 API 管理创建自定义小部件?