从类 (C#) 更改窗体上的控件值
本文关键字:控件 窗体 从类 | 更新日期: 2023-09-27 17:55:50
这应该很简单 - 不确定问题是什么。
我有一个C#类(公共.cs)和一个窗口窗体(Form1.cs)。通过 Public.cs 中的函数,我想在 Form1 上获取控件的值(不必使用对象参数)。
// This code appears in Public.cs
public string MyFunction(int num_val)
{
if (chk_num.checked == true)
{
// Something here...
}
}
问题是我的类在我的窗体上找不到控件。有什么方法必须在 C# 中引用它吗?
谢谢。
我强烈建议通过 Form1 上的特定属性(可能使用更有意义的名称)公开 Checked
属性。这将有助于对调用方隐藏 Form1 的实现细节(即控制结构),而是仅公开其他使用者完成其工作所需的逻辑
例如:
public bool IsNumberRequested
{
get { return chk_num.Checked; }
}
或者,如果您仍然想要直接访问控件,则可以从设计器中选择控件并将其Modifier
属性更改为 public(或其他内容),以便使用最初在上面编写的代码访问控件对象。
编辑:(基于评论的回复)
公共.cs仍然需要对 Form1 的引用,然后调用该对象的 IsNumberRequested
属性。
// Public.cs
public class Public
{
private Form1 _ui;
public Public(Form1 ui) { _ui = ui };
public string MyFunction(int num_val)
{
if (_ui.IsNumberRequested)
{
// Stuff
}
// Else, default Stuff
}
}
或者,您也可以将表单作为参数传递给MyFunction
,而不是将其用作实例变量。
我会反过来设置
public class Public
{
public bool CheckNumber {get;set;}
public string MyFunction(int val)
{
if(CheckNumber)
{
//do that thing
}
return ...
}
}
public partial class Form1 : Form
{
Public myinstance = new Public();
public Form1()
{
InitializeComponent();
}
private void CheckBoxChanged(object sender, EventArgs e)
{
myinstance.CheckNumber = chk_num.checked;
}
}
您需要将CheckBoxChanged
分配给复选框的OnChanged
事件处理程序(我假设该处理程序chk_num
.
这样,您的类Public
就不会依赖于表单,而表单不应该依赖于表单。
正如Reddog所说,使用更好的名称,尽管我半怀疑您只是在问题中给出了示例名称。