关于控制台程序控制窗体中控件的问题

.Net技术 码拜 9年前 (2016-07-12) 1063次浏览
现在有个工程,里面是控制台程序,本人在这个工程里增加了一个窗体,窗体中有textbox控件及listview控件
窗体通过数据库列出用户。
程序运行时,控制台启动,然后本人在控制台实例化这个窗体,并显示它,这时本人希望在控制台里刷新窗体中的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;
            });
        }
    }
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于控制台程序控制窗体中控件的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)