首先,这是我在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,使其更加用户友好。
我创建了一个包含 ComboBox , Label 和 Button 的表单。 ComboBox中的值为[1,2,3,默认值]。我想让用户在ComboBox中选择一个值,点击Button,程序会将标签更新为[A,B,C,默认]。
如何在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 获取并设置值到表单。
答案 0 :(得分: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
有一个文本框OutputBox
,DetachedForm
有一个组合框OptionComboBox
和一个按钮TriggerButton
,我们将使用它来触发事件。
MainWindow类:
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; }
}
答案 1 :(得分:0)
您可以在Form1.cs中公开获取/设置组合框值的公共函数或属性,然后在program.cs中,您可以访问该函数来设置或获取组合框。