如何创建控制台usercontrol

时间:2011-07-10 20:16:52

标签: c# winforms c#-2.0

我需要创建一个usercontrol“Console”。

我遇到了这样的问题:

  • 如果我使用TextBox,如何防止删除已经招募的命令?

  • 如果我使用ListBox / ListView,如何选择所有文本?

请告诉我从控制台做什么。

控制台应该能够完成命令(通过按Tab键),允许选择文本,并阻止输入已经建立的命令。

3 个答案:

答案 0 :(得分:2)

这是一个开始:

http://ansiconsole.codeplex.com

我使用了位图,并为其渲染文本。这样我就可以完全控制输入和输出。

答案 1 :(得分:1)

  1. 如果你需要一些“简单”的控制台应用程序:插入命令,我假设用某种DSL语言,查看执行结果和其他东西,你可以尝试在RichTextBox基础上编程,这也可以为内容提供一些样式。
  2. 重用一些已经准备好的(复杂的)编辑器,例如:
  3. Scintilla

    并努力限制这种组件的可能性以满足您的需求。

    问候。

答案 2 :(得分:0)

您可以考虑从RichTextBox控件派生,如Tigran建议的那样。

根据您希望用户能够做什么,您必须在其中放置一些限制他们能够和不能选择的逻辑。 (例如,如果您不希望他们选择以前的命令)。您可以通过SelectedText属性获取他们选择的文本。然后输入您的自定义逻辑,例如,Ctrl + C会将文本复制到变量中。

您可能会考虑使用MaximumSize属性,以便在控制台变得如此庞大后删除旧命令。

Winforms已经有一种可以使用的自动填充功能,或者只是保留一个关键字列表,当用户按下TAB时,请填写列表中的第一个单词,该单词以他们已输入的内容开头

要获取命令本身,而不是之前输入的任何文本,您可能希望从最后一行到最后一行获取所有内容。 代码可能如下所示:

String allText = this.richTextBox1.Text;           // All the text from the rich text box
Int32 lastIndex = allText.LastIndexOf("\n");       // Find the position of the last newline
String command = allText.Substring(lastIndex + 1); // Substring starting at the character after the last newline

当然,当用户按下RETURN时,该命令将被发送到您的代码并执行。