我正在使用Visual Studio 2010在C#中使用Windows窗体应用程序。
mainForm
。mainForm
包含树视图控件xmlTreeView
。myClass.cs
。现在,myClass
需要访问xmlTreeView
。但是我不知道a)如何访问表单和b)哪种方式最好这样做。
我尝试在oleksii's answer之后实现一个接口,但我没有得到它。应用程序的主要形式定义如下:
public interface IMainForm {
TreeView treeView { get; }
}
public partial class mainForm : Form, IMainForm {
public TreeView treeViewControl {
get { return myTreeViewControl; }
}
// Some code here
[...]
RuleTree rt = new RuleTree(); //How do I call this with the IMainForm interface???
}
另一个类RuleTree
的定义如下:
class RuleTree {
private readonly IMainForm mainForm;
public RuleTree(IMainForm mainForm) {
this.mainForm = mainForm;
}
}
如何使用IMainForm接口调用RuleTree
的构造函数???
答案 0 :(得分:2)
我会做以下事情。不要将其视为代码,只是为了让您理解,您可以相应地修改它。
public class MyClass
{
public void MyMethod(YourTreeViewControl treeview)
{
// Do what you need to do here
}
}
然后在你的表单代码后面实例化MyClass并将你的treeview实例传递给它,如下所示:
MyClass myClass = new MyClass();
myClass.MyMethod(tvYourTreeViewControl);
希望这是有道理的:)
答案 1 :(得分:1)
其中一种可能的方法是在这里使用依赖注入。 MyClass
将有一个带Form
参数的构造函数。因此,当您创建MyClass
时,它将具有注入形式。例如:
Foo
{
Foo(){}
}
Bar
{
private Foo currentFoo;
Bar(Foo foo) //dependency injection
{
currentFoo = foo;
}
public void OtherMethod()
{
//do something with currentFoo
}
}
最好使用接口(或抽象类),因此可以注入Foo
代替IFoo
,这很大程度上解耦了你的类,这是一个很好的设计决策。
答案 2 :(得分:0)
我评论了我的代码,请阅读评论,我也可以提供解决方案。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
///
//Declare a static form that will accesible trhought the appication
//create form called frmMain form or any other name
//
public static frmMain MainForm { get; private set; }
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//comment out default application run
//Application.Run(new MainForm());
//create a new instance of your frmMain form
//inside your main form add a tree view
//Loacte this file "frmMain.Designer.cs"
//Change treeView1 from private to public
// public System.Windows.Forms.TreeView treeView1;
MainForm = new frmMain();
//before I show my form I'll change docking of my tree view from myClass
MyClass mine = new MyClass(); //done
MainForm.ShowDialog();
}
}
public class MyClass
{
public MyClass()
{
Program.MainForm.treeView1.Dock = DockStyle.Fill;
}
}
}
答案 3 :(得分:-2)
这不可能将asp.net服务器端控件访问到除cs类以外的其他类中
test.aspx
是一个页面
您只能在test.aspx.cs
中访问测试页控件
除此之外,这是不可能的。