3

我编写用于编辑 sql 程序的小应用程序并使用出色的ScintillaNET代码编辑器控件。我为保存文件定义了一个 Ctrl+S 快捷方式:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == (Keys.Control | Keys.S))
    {
            saveToolStripButton_Click(this.saveToolStripButton, null);
    }
    else if (keyData == (Keys.Control | Keys.O))
            openToolStripButton_Click(this.openToolStripButton, null);
    else if (keyData == (Keys.Control | Keys.N))
            newToolStripButton_Click(this.newToolStripButton, null);
    else if (keyData == (Keys.Control | Keys.W))
    {
            if (this.tabControl2.SelectedTab != null)
                    (this.tabControl2.SelectedTab as WorkspaceControl).closeSelectedFile();
    }

    return base.ProcessCmdKey(ref msg, keyData);
}

当我只是重新保存旧文件时,一切正常,但是当它的新文件 - 在 SaveFileDialog 关闭并保存文件之后 - 字母“s”被添加到我的编辑器的末尾。我该如何预防?

4

2 回答 2

1

正在添加“s”,因为base.ProcessCmdKey即使不需要它也会被调用。

如果您想阻止对击键的进一步处理,只需确保true在适当的地方返回即可。

于 2012-10-05T16:55:08.947 回答
0

您可以使用key_down闪烁控制事件:

    private void scintilla_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.S && e.Control)
        {
            // Saving ...
            e.SuppressKeyPress = true;
        }
    }
于 2019-08-23T12:36:48.233 回答