1、我要在RichTextBox中敲入内容,每敲入一个字母(中文,英文,数字,其他字符都有可能),就显示一下面板。
2、面板上的内容就是刚敲入的字母内容和现在光标的位置。
3、如果我敲入的键是回车或者用鼠标点击面板,则把面板上的内容输出到RichTextBox中。
4、如果我敲入的键地Esc或者用鼠标点击面板以外的地方,则不显示面板
由于发贴规则的原故,另外100分另开题奉上。

解决方案 »

  1.   

    模拟输入法?你可以继承richtextbox,做一个自己的,然后在wndproc中捕获keydown消息进行处理。
      

  2.   

    To qyfjl() :
    哪里没有看懂?To Knight94(愚翁):
    可以看成是模拟输入法,也可以看成是模拟自动语法完成。有简单的例子参考吗?
      

  3.   

    To wxplovexsm(阿拉丁神棍) :装载内容的东东,可以是PANEL,也可以是ListBox等
      

  4.   

    面板其实就是一个接收输入的窗口,可以用ShowDialog()方式打开,
    在该面板窗口中定义一个public类型的属性,用来向richtextbox传递接收到的输入信息;
    在richtextbox中接收第一个字母时,打开该窗口,同时将接收的字母传递到该窗口中,
    以后的所有输入都有该面板窗口接收,直到接收到ESC或RETURN,并将接收到的字母记录到自己定义的属性中(上面提到的那个);
    根据实际接收到的字母作返回处理
    如果为ESC,而该窗口的属性DialogResult = DialogResult.Cancel,
    如果为RETURN,则该窗口的属性DialogResult = DialogResult.OK
    这样,在richtextbox中就可以根据返回的结果来进行处理了,不说你也清楚了。
      

  5.   

    窗口?不能是Panel吗?我试过了,Panel不能Show出来
      

  6.   

    晕,用form吧,这个不难就是麻烦些
      

  7.   

    1、我要在RichTextBox中敲入内容,每敲入一个字母(中文,英文,数字,其他字符都有可能),就显示一下面板。
    2、面板上的内容就是刚敲入的字母内容和现在光标的位置。
    3、如果我敲入的键是回车或者用鼠标点击面板,则把面板上的内容输出到RichTextBox中。
    4、如果我敲入的键地Esc或者用鼠标点击面板以外的地方,则不显示面板使用TichTextBox的TextChangged事件;
    第3点,RichTextBox中已经有刚输入的内容,还要再将Panel的内容输出(添加?)到RichTextBox么?那你在Panel中用一个TextBox来显示和修改内容,再将其添加到RichTextBox中。好像,你只是需要一个输入条和内容显示是不是?那你可以用RichTextBox的Focus事件来显示一个输入条(可以用Panel+TextBox).只用RichTextBox来显示输入内容。
      

  8.   

    提供一个方法:
    假如只是实现以上功能的话,可以简单的使用ToolTip,在TextChanged的事件中实现ToolTip,每次都显示当前输入内容,然后监视键盘操作,若是回车的话,就把ToolTip的内容输入,当然还有一些细节需要考虑,自己想吧,比如说直接敲入回车之类
      

  9.   

    To Knight94(愚翁):
    可以看成是模拟输入法,也可以看成是模拟自动语法完成。===============================================================我估计楼主想要实现的功能更类似于VS2005中的语法自动完成。
      

  10.   

    To zdjray(.Net的名字):你的方法不是很适合,我要求面板位置上显示光标的位置座标就是为了设定面板位置与光标位置一致。而TOOLTIP显然只能跟随鼠标的位置。careast(雅):
     
    你说的不错,我更需要的功能是像Vs中的自动语法提示功能,我可以根据输入RichTextBox中输入的内容来动态的显示面板中的内容,并且可以用鼠标来选择面板中的内容,而且面板要随光标走。
    我是怕问题复杂才分开来问的,不想结果让大家理解分歧了
      

  11.   

    同意 Knight94(愚翁) hoho
      

  12.   

    我写了一段代码,基本上能实现你的要求,就是Panel的定位还差了点,我会继续研究的。using System;
    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,先初始化几行数据。
    你可以参考一下先
      

  13.   

    后面的100分,继续解决遗留的定位问题。地址是:http://community.csdn.net/Expert/topic/4836/4836322.xml?temp=.2722437