簡體   English   中英

字符串變量更改時未觸發事件

[英]Event not being fired when string variable changes

GUI具有顯示事件日志的按鈕,它是帶有富文本框的另一種形式。

我正在制作一個事件日志,以告訴用戶發生了什么事。 我的問題是我不知道為什么更改字符串時未觸發我設置的事件處理程序。 基本上,此表單具有一個文本框,並且該文本框設置為名為“活動”的字符串。 該字符串被添加到有關狀態和錯誤的各種消息中。

但是,當字符串與其他消息串聯在一起時,該事件不會被觸發,並且不會自動更新。 這些事件發生時,我正在尋找實時更新。 現在,我可以關閉該表單,然后重新打開它以使其再次加載活動字符串,該方法可以正常工作,但是有人可以闡明為什么我未觸發設置的事件嗎? 這是代碼:第一部分是我啟動的New表單。 第二位是具有字符串活動的類。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace StatusLog
{
    public partial class StatusLogForm : Form
    {
        public StatusLogForm()
        {
            InitializeComponent();
        }
        private StatusLog statuslog = StatusLog.Instance;


        private void StatusLogForm_Load(object sender, EventArgs e)
        {
            statuslog.ActivityChanged += new EventHandler(statuslog_ActivityChanged);
            richTextBox1.Text = statuslog.Activity;
        }

        void statuslog_ActivityChanged(object sender, EventArgs e)
        {
            richTextBox1.Text = statuslog.Activity;
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GDCanada.LCSS.VMF.ProtoVmf;

namespace StatusLog
{
    public class StatusLog
    {
        private static StatusLog instance;
        private StatusLog()
        {
        }

        public static StatusLog Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new StatusLog();
                }
                return instance;
            }
        }

        public enum LogType
        {
            Error,
            Status,
            Information,
            Warning,
        }

        public event System.EventHandler ActivityChanged;
        private string activity = "Activity:";
        public string Activity
        {
            get
            {
                return activity;
            }
            set
            {
                activity = value;
                if (this.ActivityChanged != null)
                {
                    this.ActivityChanged(this, new System.EventArgs());
                }
            }
        }
        void activitychanged(object sender, System.EventArgs e)
        {
        }

        public void Log(string message, LogType type)
        {
            activity = activity + "\n" + type.ToString() + ": " + message;
        }
    }
}

我通過“日志”功能添加字符串。 非常感謝任何幫助,謝謝! 如果我錯過任何信息,我深表歉意。 如果需要,我將很樂意提供。

-tf.rz .NET 3.5 SP1

看一下這個方法:

public void Log(string message, LogType type)
{
    activity = activity + "\n" + type.ToString() + ": " + message;
}

您正在直接更改變量 -除了更改變量的值外,它什么也不做。

如果希望屬性代碼執行(從而引發事件),則應該執行以下操作:

public void Log(string message, LogType type)
{
    // Note use of property
    Activity = Activity + "\n" + type.ToString() + ": " + message;
}

(當然,您不必使用屬性獲取器,它只是重要的設置器。)

 public void Log(string message, LogType type)
 {
        activity = activity + "\n" + type.ToString() + ": " + message;
 }

您需要調用類的Property,而不是成員變量。

 public void Log(string message, LogType type)
 {
        Activity = Activity + "\n" + type.ToString() + ": " + message;
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM