【问题标题】:how to pass parameters to forms c#如何将参数传递给表单c#
【发布时间】:2018-07-04 08:11:11
【问题描述】:

我似乎能够将参数从程序传递给表单,但是我如何访问按钮例程中的变量。我已经放置了两个子例程 Main() 和 Start up 来运行 form1。然后我把表单的命名空间放好了。

static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        StartUp();            
    }
    static void StartUp()
    {
        bool mode = false;
        Application.Run(new Form1());
        //bool playermode = GetPlayerMode(); 
    }

namespace PencilProject
 {
public partial class Form1 : Form 
{
    private static bool modebool;
    public Form1()
    {
        InitializeComponent();
    }
    public void button1_Click(object sender, EventArgs e)
    {
        modebool = true;            
        Close();
    }
    private void button2_Click(object sender, EventArgs e)
    {
        modebool = false;
        Close();
    }
 }
}

【问题讨论】:

  • 你想在哪里通过什么?
  • 我想把bool的参数mode传递给按钮来决定使用什么模式
  • 你需要一个构造函数Form1(bool mode) {modebool=mode;}
  • Application.Run(new Form1(/*PASS DATA HERE*/)); 然后在构造函数里面有一些参数如public Form1(string name, int age)

标签: c# windows forms parameters


【解决方案1】:

您可以使用 DialogResult 来获得某种“返回值”:

static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        StartUp();            
    }
    static void StartUp()
    {
        Form1 frm = new Form1()
        Application.Run(frm);

        bool mode = frm.DialogResult == DialogResult.Yes;

        //bool playermode = GetPlayerMode(); 
    }

namespace PencilProject
 {
public partial class Form1 : Form 
{
    public Form1()
    {
        InitializeComponent();
    }
    public void button1_Click(object sender, EventArgs e)
    {
        DialogResult = DialogResult.Yes;      
        Close();
    }
    private void button2_Click(object sender, EventArgs e)
    {
        DialogResult = DialogResult.No;
        Close();
    }
 }
}

您甚至可以将 DialogResult 值分配给设计器中的按钮。

【讨论】:

  • 当我尝试这个时,在主程序中,模式仍然等于 false
  • 我明白了。您希望在 StartUp 中恢复所选值。请参阅更新答案...很快。
  • @JacobBrewer 欢迎来到 StackOverflow。如果答案对您有所帮助,您可以考虑将其标记为已接受。如果您不知道它是如何工作的,this post 可以提供帮助。
【解决方案2】:

试试这个:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        var f = new Form1();
        f.Mode = false;
        Application.Run(f);
        bool playerMode = f.Mode;
    }
}

还有:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public bool Mode = false;

    private void button1_Click(object sender, EventArgs e)
    {
        this.Mode = true;
        this.Close();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        this.Mode = false;
        this.Close();
    }
}

这对我来说很好,可以根据我单击的按钮设置 bool playerMode。

【讨论】:

    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    相关资源
    最近更新 更多