现在有个工程,里面是控制台程序,本人在这个工程里增加了一个窗体,窗体中有textbox控件及listview控件
窗体通过数据库列出用户。
程序运行时,控制台启动,然后本人在控制台实例化这个窗体,并显示它,这时本人希望在控制台里刷新窗体中的listview,并操作textbox的内容,问一下该怎么样解决?
窗体中listview及textbox本人已经设置了public属性。如图中,main.cs是本人的窗体,窗体中的listview为public
本人在控制台中再次实例化这个窗体,然后调用这个listview的刷新方法,例如 getuserlist(),不报错,但是listview并不会刷新数据
是原因是本人不能把窗体起名为main吗?
请高人解惑,谢谢。


窗体通过数据库列出用户。
程序运行时,控制台启动,然后本人在控制台实例化这个窗体,并显示它,这时本人希望在控制台里刷新窗体中的listview,并操作textbox的内容,问一下该怎么样解决?
窗体中listview及textbox本人已经设置了public属性。如图中,main.cs是本人的窗体,窗体中的listview为public
本人在控制台中再次实例化这个窗体,然后调用这个listview的刷新方法,例如 getuserlist(),不报错,但是listview并不会刷新数据
是原因是本人不能把窗体起名为main吗?
请高人解惑,谢谢。


解决方案
50
‘再次’的那个窗体,不是你‘显示’的那个窗体。道理很简单:
Window a = new Window(); a.Show(); ... Window b = new Window(); b.DoSomthing(); // 这里操作的是b,不是a。
50
你实例化的是新窗体,不是你要操作的窗体
50
你可以试试用静态方法来调用你的窗体
50
以下示例供你参考:
using System;
using System.Threading;
using System.Windows.Forms;
class Program
{
[STAThread]
static void Main(string[] args)
{
Form form = new Form() { Text = "控制台输入可以控制标题,exit退出"};
ThreadPool.QueueUserWorkItem(ControlThread, form);
Application.Run(form);
}
static void ControlThread(object state)
{
Form form = (Form)state;
while (true)
{
string line = Console.ReadLine();
form.BeginInvoke((Action)delegate
{
if (line == "exit") form.Close();
else form.Text = line;
});
}
}
}