C#字符消息

hjh2005 2009-12-20 06:58:04
在对话框里有5个textbox控件,当光标停留在某个控件字符串中时,我想鼠标点一下工具栏的“添加”图标,就在光标处插入一个字符‘a’,请问要怎么实现?

我想采用向对话框发送字符消息的方式如下:
private void toolStripButton1_Click(object sender, EventArgs e)
{
SendMessage(Handle, (uint)WM_CHAR,'a', 0);
}

但是不会出现预期的效果,请各位指教
...全文
132 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
l171147904 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lfs09 的回复:]
都是在同一个程序界面,需要用得着发送消息吗?

直接 text的变量 .text+="a";
这样不就OK?

C# code
TextBox tb,,,,

tb.text+="a";
[/Quote]
我顶。。。。。。。。。。。。。用的着发送?
鼠标事件,有上次焦点所在的位置的!属性!


  • 打赏
  • 举报
回复
没看明白你还要定位是哪个TextBox,加个变量 就行了:


public partial class Form1 : Form
{
int index = 0;
TextBox box = null;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
if (box != null)
{
box.Select();//激活控件
box.Select(index, 0);//定位光标
SendKeys.Send("A");//发送字符
}
}

private void Form1_Load(object sender, EventArgs e)
{
textBox1.LostFocus += new EventHandler(textBox1_LostFocus);
}

void textBox1_LostFocus(object sender, EventArgs e)
{
index = textBox1.SelectionStart;//保存当前光标位置
box = sender as TextBox;//保存要操作的文本框
}
}
你妹的特盗不 2009-12-21
  • 打赏
  • 举报
回复
都是在同一个程序界面,需要用得着发送消息吗?

直接 text的变量 .text+="a";
这样不就OK?


TextBox tb,,,,

tb.text+="a";
wartim 2009-12-21
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication243
{
public partial class Form1 : Form
{
Control OldActiveControl = null;

public Form1()
{
InitializeComponent();

Button B = new Button();
B.Parent = this;
B.Text = "插入";
B.MouseEnter += new EventHandler(B_MouseEnter);
B.Click += new EventHandler(B_Click);

for (int i = 0; i < 5; i++)
{
TextBox TB = new TextBox();
TB.Parent = this;
TB.Text = "123";
TB.Location = new Point(0, (i + 1) * 30);
}
}

void B_MouseEnter(object sender, EventArgs e)
{
OldActiveControl = ActiveControl;
}

void B_Click(object sender, EventArgs e)
{
if (OldActiveControl == null || !(OldActiveControl is TextBox))
return;

TextBox TB = (TextBox)OldActiveControl;

TB.Text = TB.Text.Substring(0, TB.SelectionStart) + "a"
+ TB.Text.Substring(TB.SelectionStart, TB.TextLength - TB.SelectionStart);

TB.Focus();
}
}
}
  • 打赏
  • 举报
回复
顺便说一下:能用.net 搞定的,就不要用Api
  • 打赏
  • 举报
回复

int index = 0;//保存TextBox光标所在的位置
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
//按下按钮时,激活Box控件
textBox1.Select();
//恢复光标所在位置
textBox1.Select(index, 0);
//发送字符串
SendKeys.Send("A");
}

private void Form1_Load(object sender, EventArgs e)
{
//注册事件,每当Box失去输入焦点时发生
textBox1.LostFocus += new EventHandler(textBox1_LostFocus);
}

void textBox1_LostFocus(object sender, EventArgs e)
{
index = textBox1.SelectionStart;
//将Box的光标位置保存
}
波导终结者 2009-12-21
  • 打赏
  • 举报
回复
你点了工具栏,焦点就移走了,你应该直接向控件的句柄发送
hjh2005 2009-12-21
  • 打赏
  • 举报
回复
那怎么知道用户测试选的是哪个文本框呢?

会不会是我的SendMessage的参数写错了?
hjh2005 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wartim 的回复:]
C# codeusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace WindowsApplication243
{pu?-
[/Quote]

高手啊 厉害3q!
jbo126 2009-12-20
  • 打赏
  • 举报
回复
楼主的就可以吧,只不过第一个参数是不是要改成文本框的句柄?
lijing3333 2009-12-20
  • 打赏
  • 举报
回复
帮顶
hjh2005 2009-12-20
  • 打赏
  • 举报
回复
2楼能详细点么? 谢谢!!
zl194 2009-12-20
  • 打赏
  • 举报
回复
我想的是,先便利textbox 看哪个是处于活动状态的。
  • 打赏
  • 举报
回复
SendKeys
abcdef1111111 2009-12-20
  • 打赏
  • 举报
回复
这个没做过,帮顶

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧