1、我要在RichTextBox中敲入内容,每敲入一个字母(中文,英文,数字,其他字符都有可能),就显示一下面板。
2、面板上的内容就是刚敲入的字母内容和现在光标的位置。
3、如果我敲入的键是回车或者用鼠标点击面板,则把面板上的内容输出到RichTextBox中。
4、如果我敲入的键地Esc或者用鼠标点击面板以外的地方,则不显示面板
由于发贴规则的原故,另外100分另开题奉上。
2、面板上的内容就是刚敲入的字母内容和现在光标的位置。
3、如果我敲入的键是回车或者用鼠标点击面板,则把面板上的内容输出到RichTextBox中。
4、如果我敲入的键地Esc或者用鼠标点击面板以外的地方,则不显示面板
由于发贴规则的原故,另外100分另开题奉上。
哪里没有看懂?To Knight94(愚翁):
可以看成是模拟输入法,也可以看成是模拟自动语法完成。有简单的例子参考吗?
在该面板窗口中定义一个public类型的属性,用来向richtextbox传递接收到的输入信息;
在richtextbox中接收第一个字母时,打开该窗口,同时将接收的字母传递到该窗口中,
以后的所有输入都有该面板窗口接收,直到接收到ESC或RETURN,并将接收到的字母记录到自己定义的属性中(上面提到的那个);
根据实际接收到的字母作返回处理
如果为ESC,而该窗口的属性DialogResult = DialogResult.Cancel,
如果为RETURN,则该窗口的属性DialogResult = DialogResult.OK
这样,在richtextbox中就可以根据返回的结果来进行处理了,不说你也清楚了。
2、面板上的内容就是刚敲入的字母内容和现在光标的位置。
3、如果我敲入的键是回车或者用鼠标点击面板,则把面板上的内容输出到RichTextBox中。
4、如果我敲入的键地Esc或者用鼠标点击面板以外的地方,则不显示面板使用TichTextBox的TextChangged事件;
第3点,RichTextBox中已经有刚输入的内容,还要再将Panel的内容输出(添加?)到RichTextBox么?那你在Panel中用一个TextBox来显示和修改内容,再将其添加到RichTextBox中。好像,你只是需要一个输入条和内容显示是不是?那你可以用RichTextBox的Focus事件来显示一个输入条(可以用Panel+TextBox).只用RichTextBox来显示输入内容。
假如只是实现以上功能的话,可以简单的使用ToolTip,在TextChanged的事件中实现ToolTip,每次都显示当前输入内容,然后监视键盘操作,若是回车的话,就把ToolTip的内容输入,当然还有一些细节需要考虑,自己想吧,比如说直接敲入回车之类
可以看成是模拟输入法,也可以看成是模拟自动语法完成。===============================================================我估计楼主想要实现的功能更类似于VS2005中的语法自动完成。
你说的不错,我更需要的功能是像Vs中的自动语法提示功能,我可以根据输入RichTextBox中输入的内容来动态的显示面板中的内容,并且可以用鼠标来选择面板中的内容,而且面板要随光标走。
我是怕问题复杂才分开来问的,不想结果让大家理解分歧了
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace Fun_Lab
{
public partial class ShowPanel : Form
{
public ShowPanel()
{
InitializeComponent();
} private void ShowPanel_Load(object sender, EventArgs e)
{
this.panel1.Visible = false;
} private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Escape||e.KeyChar==(char)Keys.Space)
{
this.panel1.Visible = false;
this.richTextBox1.SelectionStart = this.richTextBox1.Text.Length;
return;
}
if (e.KeyChar == (char)Keys.Enter)
{
try
{
this.richTextBox1.Text=this.richTextBox1.Text.Substring(0, this.richTextBox1.Text.Length - 2);
this.richTextBox1.AppendText(this.listBox1.Items[0].ToString());
this.richTextBox1.SelectionStart = this.richTextBox1.Text.Length;
this.panel1.Visible = false;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
return;
}
this.panel1.Visible = true;
//这里输入panel1的定位。
} }
}
这里的界面是:一个form,上面放一个RichTextBox,其Dock设为Fill。再放一个Panel,上面放一个ListBox,先初始化几行数据。
你可以参考一下先