积极答复者
记事本添加timer控件监测是否选定文本,如果选定则:剪切,复制,删除子菜单和快捷键可用,否则不行,求代码

问题
答案
-
您好,
您可以透过检查RichTextBox中的SelectedText是否为空值!
Clipboard有没有资料,可透过 Clipboard.ContainsText(TextDataFormat.Text )来判断!
private void timer1_Tick(object sender, EventArgs e) { this.複製CToolStripMenuItem.Enabled = (!string.IsNullOrEmpty(this.richTextBox1.SelectedText)); this.剪下TToolStripMenuItem.Enabled = (!string.IsNullOrEmpty(this.richTextBox1.SelectedText)); }
以上說明若有錯誤請指教,謝謝。
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/- 已编辑 亂馬客 2012年5月2日 5:12
- 已标记为答案 Bob ShenModerator 2012年5月9日 2:26
-
首先不需要用 timer 控件轮询状态,你的实现思路是不正确的(虽然可以实现)。
1)判断用户是否选择了文本或剪贴板是否有文本,用“亂馬客” 的方法判断。
2)主菜单包括上下文菜单,有 DropDownOpening 事件(上下文菜单则为 Opening 事件),这个事件是在下拉菜单显示前触发,你应该在这个事件里编写禁用菜单项的代码。
注意:
1)如果是 MenuStrip 则为 DropDownOpening 事件;
2)如果是 ContextMenuStrip 则为 Opening 事件;
3)如果是 MainMenu 、ContextMenu(VS2003的)则是 Popup 事件
如:void 下拉菜单_DropDownOpening(.....) //
{
this.复制菜单项.Enabled = this.文本框.SelectedText.Length > 0;
// .... 若干菜单项代码(略)...
}3)复制、剪切... 等事件处理程序中,首先要判断用户是否选择了文本,如果没有选择则直接 return 不响应用户操作(起到禁用快捷键功能)。
如:void 复制菜单项_Click(...)
{
if(this.文本框.SelectedText.Length == 0) // 如果用户没有选择文本,则不进行任何处理
return;// 剪贴板操作时完全有可能发生错误的,以下代码建议 try...catch 捕获错误。
Clipboard.Clear(); // 清除剪贴板
Clipboard.SetText(文本框.SelectedText); // 将文本数据复制到剪贴板
}- 已建议为答案 亂馬客 2012年5月2日 9:07
- 已标记为答案 Bob ShenModerator 2012年5月9日 2:26
全部回复
-
您好,
您可以透过检查RichTextBox中的SelectedText是否为空值!
Clipboard有没有资料,可透过 Clipboard.ContainsText(TextDataFormat.Text )来判断!
private void timer1_Tick(object sender, EventArgs e) { this.複製CToolStripMenuItem.Enabled = (!string.IsNullOrEmpty(this.richTextBox1.SelectedText)); this.剪下TToolStripMenuItem.Enabled = (!string.IsNullOrEmpty(this.richTextBox1.SelectedText)); }
以上說明若有錯誤請指教,謝謝。
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/- 已编辑 亂馬客 2012年5月2日 5:12
- 已标记为答案 Bob ShenModerator 2012年5月9日 2:26
-
首先不需要用 timer 控件轮询状态,你的实现思路是不正确的(虽然可以实现)。
1)判断用户是否选择了文本或剪贴板是否有文本,用“亂馬客” 的方法判断。
2)主菜单包括上下文菜单,有 DropDownOpening 事件(上下文菜单则为 Opening 事件),这个事件是在下拉菜单显示前触发,你应该在这个事件里编写禁用菜单项的代码。
注意:
1)如果是 MenuStrip 则为 DropDownOpening 事件;
2)如果是 ContextMenuStrip 则为 Opening 事件;
3)如果是 MainMenu 、ContextMenu(VS2003的)则是 Popup 事件
如:void 下拉菜单_DropDownOpening(.....) //
{
this.复制菜单项.Enabled = this.文本框.SelectedText.Length > 0;
// .... 若干菜单项代码(略)...
}3)复制、剪切... 等事件处理程序中,首先要判断用户是否选择了文本,如果没有选择则直接 return 不响应用户操作(起到禁用快捷键功能)。
如:void 复制菜单项_Click(...)
{
if(this.文本框.SelectedText.Length == 0) // 如果用户没有选择文本,则不进行任何处理
return;// 剪贴板操作时完全有可能发生错误的,以下代码建议 try...catch 捕获错误。
Clipboard.Clear(); // 清除剪贴板
Clipboard.SetText(文本框.SelectedText); // 将文本数据复制到剪贴板
}- 已建议为答案 亂馬客 2012年5月2日 9:07
- 已标记为答案 Bob ShenModerator 2012年5月9日 2:26