【问题标题】:Access form control from another class in another file从另一个文件中的另一个类访问表单控件
【发布时间】:2016-05-06 08:01:28
【问题描述】:

我有 2 个 .cs 文件(A、B)。

在我的 A.cs 文件中,它属于公共类 A。我想在公共类 B 中使用一个控件(gridview),它在 B.designer.cs 中。是否可以在不继承 A 中的 B 类的情况下做到这一点?

我知道我可能需要一个属性并在 B 类中创建一个 A 类的新实例。这就是我目前所拥有的。

这是在 B.cs。我不知道在哪里/如何做财产。

这就是我定义网格视图的方式:
公共 DevExpress.XtraGrid.Views.Grid.GridView gridView

这就是我在其中写入文本的方式:this.gridView1.OptionsFind.FindNullPrompt = "hello"

private void treeView_NodeMouseClick(object sender, System.EventArgs e)
{
    A gridview = new A();
    A.gridview = "hello";
}

【问题讨论】:

  • 你有 2 个类,B 类有一个公共文本框? B 类的代码会有所帮助。
  • 不清楚您要做什么。如果一个对象需要引用另一个对象的现有实例中的属性,那么它需要对该实例的引用。
  • 您可以将 A 类的实例注入到 B 的构造函数中,例如以获取该引用。但更重要的是,告诉我们 A 和 B 是如何相关的。两者都是形式吗?是否有主容器形式?如果是,那么 A 和 B 可能是位于具有 A 和 B 实例的主窗体内的用户控件。然后,您可以设置事件,以便 treeView_node 单击可以在 A 中触发事件以更改文本框文本值.
  • 看看这个解决方案:stackoverflow.com/questions/28493003/…

标签: c# oop methods properties


【解决方案1】:

你需要在你的 B 类中有一个 A 的实例。

你可以这样得到:

public class B
{
    private A theA;
    public B(A theA)
    {
        this.theA = theA;
    }

    private void treeView_NodeMouseClick(object sender, System.EventArgs e)
    {
        theA.textbox = "hello";
    }
}

现在,当您创建 B 类的实例时,您可以这样编写。

B b = new b(new A());

【讨论】:

  • 如何确保在我想写“Hello”的文本框中指定?
  • @Annie123 当您将文本框添加到类 A 时,它会获得一个名称。当您说 B 类中的 theA.textbox 时,请确保“.textbox”是 A 类中文本框的名称。您要写入的文本框的名称。
  • 所以 theA 只是一个随机变量,但 ."textbox" 是文本框的名称
  • 文本框实际上是这样定义的:public DevExpress.XtraGrid.Views.Grid.GridView gridViewTest,这就是我在其中编写文本的方式:this.gridView1.OptionsFind.FindNullPrompt = "hello"跨度>
  • @Annie123 好吧,它不是随机的,它是您的 A 类实例。但是,如果您在 A 类中的文本框称为文本框,您可以说 theA.textbox。如果它被称为 txtHello,那么你会说:theA.txtHello。这与任何其他类型的变量的工作方式相同。
【解决方案2】:
private void treeView_NodeMouseClick(object sender, System.EventArgs e)
{
    A gridview = new A();
    A.gridview = "hello";
}

在这部分代码中,

首先,您正在创建一个名为“gridview”的 A 的新实例,然后使用

A.gridview = "你好"

尝试访问实际上应该是的gridview

gridview.gridview = "你好";

其次,通过创建 A 的新实例并更改其字段“gridview”的值(根据您的代码,我认为它可能是一个文本框),它不会对界面产生任何影响,因为这不是您要引用的 A。

相反,它可能应该是: 在 B 类中,类似,

Public void UpdateAGridview(A yourA)
{
    yourA.gridview = "hello";
    //side note: setting a string value to a gridview, is this correct?
}

在这里你得到一个你想要与之交互的 A 的引用,所以 A 中的“gridview”将是你想要更新的那个。

【讨论】:

    猜你喜欢
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多