我在这里有一个小项目,我已经在名为main.cs的表单中的文件夹浏览器对话框中声明了一个名为“dir”的变量:
namespace XmoSupportTools
{
public partial class Main : Form
{
public string dir;
public FolderBrowserDialog xmodialog { get; private set; }
public DialogResult xmodialogresult { get; private set; }
//metoder der bliver brugt senere
public void startxmo()
{
string startfile = dir + "\\xmo.exe";
Process xmoappli = new Process();
if (File.Exists(startfile))
{
xmoappli.StartInfo.FileName = startfile;
xmoappli.Start();
}
else
{
MessageBox.Show("XMO.exe blev ikke fundet på den valgte lokation!");
File.Delete(dir + "\\xmo.ini");
dialog();
}
}
public void dialog()
{
xmodialog = new FolderBrowserDialog();
xmodialog.Description = "Find dit XMO Directory:";
xmodialogresult = xmodialog.ShowDialog();
if (xmodialogresult == DialogResult.OK)
{
dir = xmodialog.SelectedPath;
}
我想在我的第二种形式Kunde.cs中使用那个“dir”变量:
public void startxmo()
{
string startfile = dir + "\\xmo.exe";
Process xmoappli = new Process();
if (File.Exists(startfile))
{
xmoappli.StartInfo.FileName = startfile;
xmoappli.Start();
}
else
{
MessageBox.Show("XMO.exe blev ikke fundet på den valgte lokation!");
File.Delete(dir + "\\xmo.ini");
dialog();
}
}
答案 0 :(得分:1)
您可以尝试使用表单2(Kunde.cs)上的参数创建公共类,并将您调用的代码插入该类。从主窗体调用该函数并传递参数。例如:
//this should be on 2nd form
public void sampleFunction (string dir)
{
//paste your code here
}
//this is how you will call it on main form
form2.sampleFunction(dir);
答案 1 :(得分:1)
你在哪里创建Kunde.cs表单的实例?也许你可以通过kunde.cs的自定义custructor的参数传递dir;有点像(虽然它是来自略有不同的上下文的代码,但它仍使用相同的样式。) -
private void button_login(object sender, EventArgs e)
{
MainMenu ss= new MainMenu(textBox1.Text);
this.Hide();
ss.Show();
}
class MainMenu : Form
{
// This is an "Auto-Implemented Property".
// Auto-Implemented Properties are used as a shortcut of what you have done.
// Google them for more information.
public string UserName { get; set; }
private void MainMenu(string userName)
{
this.UserName = userName;
}
}
答案 2 :(得分:1)
这在很大程度上取决于应用程序的生命周期,而且我并不精通winforms,但是,如果你可以将Kunde类与Main类挂钩,例如像这样:
public partial class Main : Form
{
private Kunde _kunde;
public Main(Kunde kunde)
{
_kunde = kunde;
}
public void dialog()
{
xmodialog = new FolderBrowserDialog();
xmodialog.Description = "Find dit XMO Directory:";
xmodialogresult = xmodialog.ShowDialog();
if (xmodialogresult == DialogResult.OK)
{
dir = xmodialog.SelectedPath;
_kunde.Dir = dir;
}
}
// rest of your code...
}
public class Kunde
{
public string Dir { get; set; }
public void startxmo()
{
string startfile = Dir + "\\xmo.exe";
Process xmoappli = new Process();
if (File.Exists(startfile))
{
xmoappli.StartInfo.FileName = startfile;
xmoappli.Start();
}
else
{
MessageBox.Show("XMO.exe blev ikke fundet på den valgte lokation!");
File.Delete(dir + "\\xmo.ini");
dialog();
}
}
}
然后使用示例Autofac,Simple Injector或其他类型的DI框架将Kunde对象注入表单。
本质上,您正在寻找一个观察者模式的简单实现,其中Kunde对象观察Main表单,简单的方式不需要动态注册或取消注册,因此您可以通过构造函数注入来修复依赖项。 / p>
答案 3 :(得分:1)
在program.cs中将mainform实例设置为public static
public static Lapphantering mainForm;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
mainForm = new Mainform(); // create instance of Lapphantering
Application.Run(mainForm);
}
在你的主体中:
public partial class Main : Form
{
public string dir;
//code
}
在你的其他班级:
public void startxmo()
{
//access dir variable from main form instance in program.cs
string startfile = program.mainform.dir + "\\xmo.exe";
Process xmoappli = new Process();
if (File.Exists(startfile))
{
xmoappli.StartInfo.FileName = startfile;
xmoappli.Start();
}
else
{
MessageBox.Show("XMO.exe blev ikke fundet på den valgte lokation!");
File.Delete(program.mainform.dir + "\\xmo.ini");
dialog();
}
}
所以现在你可以通过在每个类中访问main中的字符串目录 Program.cs mainform实例。
答案 4 :(得分:1)
您可以通过编写
在Kunde.cs中完成此操作System.Windows.Forms.Form f = System.Windows.Forms.Application.OpenForms["MainForm"];
//Whatever is the Name of the Form
//than
string kundedir = ((MainForm)f).dir;
另一种方法是你可以创建一个参数化的构造函数来调用Kunde然后在MainForm中
Kunde k = new Kunde(dir);
在Kunde.cs
string kundedir;
Kunde(string dirval)
{
kundedir = dirval;
}
答案 5 :(得分:0)
您可以将create dir
设置为static
变量,并将保护级别设置为您希望变量dir
可以访问应用程序中其他表单的范围< / p>
{access specifier} static int dir = "path";
{access specifier}可以是public
,protected internal
,protected
等,具体取决于它。
然后通过点符号调用dir
:
Main.dir.ToString();
e.g。
public partial class Form1 : Form
{
protected internal static int dir = 54;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Form2 a = new Form2();
a.Show();
}
}
public partial class Form2 : Form
{
public Form2()
{
MessageBox.Show(Form1.dir.ToString());
InitializeComponent();
}
}