0

首先,这是我在 Visual Studio 2010 中使用 C# 构建的简单应用程序,文件名为program.cs,所有进程都将显示在命令提示符中。

public static void Main(string[] args)
{
    int input = Convert.ToInt32(Console.ReadLine());
    switch (input)
    {
        case 1:
            Console.WriteLine("A");
            break;
        case 2:
            Console.WriteLine("B");
            break;
        case 3:
            Console.WriteLine("C");
            break;
        default:
            Console.WriteLine("default");
            break;
    }
}

我想构建一个 GUI 以使其更加用户友好。

我创建了一个带有ComboBoxLabelButton的表单。ComboBox 中的值为 [1,2,3,default]。我想让用户在 ComboBox 中选择一个值,点击按钮,程序会将标签更新为 [A,B,C,default]。

如何保留program.cs中的逻辑,并实现上述目标?

我创建了一个表单,Visual Studio 生成了一个看起来像这样的 Form1.cs

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

所以我认为我遇到的问题是我不知道program.cs如何获取/设置 Form1 的值

Main()中,我添加Application.Run(new Form1());了它运行表单而不是命令提示符,但后来我被卡住了。我试过comboBox1.SelectedValue了,但我只能在 From1.cs 而不是 program.cs 中获得价值,我需要它在 program.cs 中,这样我才能应用逻辑。

只是为了澄清,这只是我构建的一个示例。实际的program.cs包含更多的逻辑,但我认为这不会影响我想在这里做的事情,所以我没有把它放在描述中。我需要一种从program.cs获取和设置值到表单的方法。

4

2 回答 2

2

我不认为最好的解决方案是向控制台应用程序添加 GUI,但我之前遇到过类似的情况并且能够成功地做到这一点。最好的选择是将逻辑重构为可以从单独的 GUI 应用程序引用的库。

在表单类中创建事件并从 program.cs 订阅它们以驱动需要发生的逻辑。您可以使用 EventArgs 类将值传入和传出逻辑。这本质上就是您编写驱动表单的代码时所做的事情,您只是将其卸载到单独的类中。

更新:添加了示例代码

这是基本的基于事件的编程。通过使用泛型,我们可以大大减少样板代码的数量,但最好了解我们通过泛型自动创建的委托。如果出现错误时您不了解快捷方式的工作方式(或不了解),快捷方式可能会成为障碍。

事件如何:http: //msdn.microsoft.com/en-us/library/w369ty8x.aspx

通用代表:http: //msdn.microsoft.com/en-us/library/sx2bwtw7.aspx

例如,我创建了一对表格。MainWindow有一个文本框OutputBoxDetachedForm有一个组合框OptionComboBox和一个按钮TriggerButton,我们将使用它们来触发事件。

主窗口类:

public partial class MainWindow : Form
{
    public MainWindow()
    {
        InitializeComponent();
        DetachedForm detachedForm = new DetachedForm();
        detachedForm.SelectionMade += new EventHandler<SelectionMadeEventArgs>(detachedForm_SelectionMade);            
        detachedForm.Show();
    }

    void detachedForm_SelectionMade(object sender, SelectionMadeEventArgs e)
    {
        OutputBox.Text = e.ActualSelection;
    }
}

DetachedForm 类

public partial class DetachedForm : Form
{
    public event EventHandler<SelectionMadeEventArgs> SelectionMade;

    public DetachedForm()
    {
        InitializeComponent();
    }

    private void OnSelectionMade(SelectionMadeEventArgs e)
    {
        EventHandler<SelectionMadeEventArgs> handler = SelectionMade;

        if (handler != null)
        {
            handler(this, e);
        }
    }

    private void TriggerButton_Click(object sender, EventArgs e)
    {
        if (OptionComboBox.SelectedItem != null)
        {
            SelectionMadeEventArgs args = new SelectionMadeEventArgs(OptionComboBox.SelectedItem.ToString());
            OnSelectionMade(args);
        }
    }
}

public class SelectionMadeEventArgs : EventArgs
{
    public SelectionMadeEventArgs(String actualSelection)
    {
        ActualSelection = actualSelection;
    }

    public String ActualSelection { get; set; }
}
于 2013-08-28T03:14:35.463 回答
0

您可以在 Form1.cs 中公开获取/设置组合框值的公共函数或属性,然后在 program.cs 中您可以访问该函数以设置或获取组合框。

于 2013-08-28T03:22:38.057 回答