从类 (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# 中引用它吗?

谢谢。

从类 (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所说,使用更好的名称,尽管我半怀疑您只是在问题中给出了示例名称。