现在有个工程,里面是控制台程序,本人在这个工程里增加了一个窗体,窗体中有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; }); } } }