2012-05-11 122 views
1

因此,我希望能够在标签上显示消息而无需点击标签。显示不点击的标签消息

public void servicestatus_Click_1(object sender, EventArgs e) 
    { 
     var mavbridgeservice = new System.ServiceProcess.ServiceController("MavBridge"); 

     if (mavbridgeservice.Status == ServiceControllerStatus.Running) 
     { 
      servicestatus.Text = ("The service is running!"); 
     } 

     else 
     { 
      servicestatus.Text = "The service is stopped!"; 
     } 
    } 

我绑放(NULL,NULL)在(对象发件人,EventArgs的),但是这给了错误,我不知道为什么。我那里的代码与任何点击没有任何关联。

+0

从你身在何处为解释这可能deosnt火试图改变标签的价值? – Habib

+0

你能解释一下好吗?应该没有问题。 发生了哪个错误? –

+0

当我点击时,标签改变,它完美地发现。我只是希望它改变,而用户不必点击标签 – heinst

回答

5

您显然希望显示服务器的状态。

但是,当用户请求更新时,您不希望更改它,您希望它自动更改吗?

您有两种选择。 编辑:我现在看到选项#1不会工作,您将需要下面的计时器选项。我删除了选项#1

选项#2 如果它在您的程序外更改,那么您可以添加一个计时器,每秒钟或两秒钟提示一次,具体取决于您希望更新用户的速度,并且在此期间添加您的代码设置标签

public Timer t = new Timer(); 

然后在您的主窗体构造函数中,在InitializeComponent();线在timer.Tick事件添加此

t.Interval = 1000; 
    t.Tick+=new EventHandler(t_Tick); 
    t.Enable=true; 

运行代码来确定状态(目前什么是你的标签的click事件)

void t_Tick(object sender, EventArgs e) 
    { 
     var mavbridgeservice = new System.ServiceProcess.ServiceController("MavBridge"); 

     if (mavbridgeservice.Status == ServiceControllerStatus.Running) 
     { 
      servicestatus.Text = ("The service is running!"); 
     } 

     else 
     { 
      servicestatus.Text = "The service is stopped!"; 
     } 
    } 
+0

我添加了一个更新,第一个选项不会为你工作,因为你没有设置状态,你只是检查它,在这种情况下,我认为计时器是真的要走的路。 –

+0

不要忘记提及不要把这里面的点击事件,或者它仍然只会发生在点击,把这个无处不在,否则你写mavbridgeservice.Status == ServiceControllerStatus.Running 并完全废弃点击事件代码 – RhysW

+0

@RhysW我删除选项#1,以便您的评论不再有效....对不起:) –

1

中的参数把空空事件处理程序给你一个错误,因为代码需要知道什么发送了这个请求(对象,在这种情况下是标签),它使用的事件参数(e)你不能将这些请求清空,它需要它们起作用。这就是它出错的原因。

还当你点击,因为你还没有链接的标签,单击事件与此代码(click_1显示有一个传统的点击其链接到你不在使用)