好的,这对你们来说很容易,我基本上有一个 C# winform 应用程序,它只有一个 RichTextBox,还有一个名为 Terminal 的类,在那个类中有一个 RichTextBox 数据成员和其他一些东西,我通过了我的 RichTextBox形成终端的构造函数,如下所示:
public Terminal(RichTextBox terminalWindow)
{
this.terminalWindow = terminalWindow;
CommandsBuffer = new List<string>();
currentDirectory = homeDirectory;
this.terminalWindow.TextChanged += new EventHandler(terminalWindow_TextChanged);
InsertCurrentDirectory();
}
这就是我在 InsertCurrentDirectory() 方法中所做的:
private void InsertCurrentDirectory()
{
terminalWindow.Text = terminalWindow.Text.Insert(0, currentDirectory);
terminalWindow.Text = terminalWindow.Text.Insert(terminalTextLength, ":");
terminalWindow.SelectionStart = terminalTextLength + 1;
}
如您所见,我在调用此方法之前已经注册了该事件,但问题是,即使我在此方法中更改了文本,该事件也没有触发。但是当我在注册事件后立即更改构造函数中的文本时,它实际上被触发了,例如:
public Terminal(RichTextBox terminalWindow)
{
// ...
this.terminalWindow.TextChanged += new EventHandler(terminalWindow_TextChanged);
this.terminalWindow.Text = "the event fired here";
}
这是 TextChanged 事件,以防您想知道其中的内容:
void terminalWindow_TextChanged(object sender, EventArgs e)
{
terminalTextLength = terminalWindow.Text.Length;
}
为什么会这样?为什么事件没有从方法内部触发?我怎么能开火?
谢谢。