| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6352 人关注过本帖
标题:怎么实现记事本里状态栏显示光标的行号和列号
只看楼主 加入收藏
yaybig
Rank: 1
来 自:广西玉林
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-10-13
收藏
 问题点数:0 回复次数:10 
怎么实现记事本里状态栏显示光标的行号和列号
那位高手小小给点提示就好了!
搜索更多相关主题的帖子: 光标 行号 记事本 状态 
2008-10-14 00:34
yaybig
Rank: 1
来 自:广西玉林
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-10-13
收藏
得分:0 
顶一下
2008-10-14 00:40
乖老鼠
Rank: 5Rank: 5
来 自:四川省
等 级:职业侠客
威 望:2
帖 子:434
专家分:394
注 册:2008-9-8
收藏
得分:0 
我这里有个方法,是从网上找的。
        #region 获取光标位置代码
        private const int EM_GETSEL = 0xB0;
        private const int EM_LINEFROMCHAR = 0xC9;
        private const int EM_LINEINDEX = 0xBB;
        [DllImport("user32.dll", EntryPoint = "SendMessage")]
        public static extern int SendMessage(int hwnd,int wMsg,int wParam,ref int lParam);
        private Point GetCursorPos(int TextHwnd)
        {
            int i = 0, j = 0, k = 0;
            int lParam = 0, wParam = 0;
            i = SendMessage(TextHwnd, EM_GETSEL, wParam, ref lParam);
            j = i / 65536;
            int lineNo = SendMessage(TextHwnd, EM_LINEFROMCHAR, j, ref lParam) + 1;
            k = SendMessage(TextHwnd, EM_LINEINDEX, -1, ref lParam);
            int colNo = j - k + 1;
            Point ret = new Point(lineNo, colNo);
            return ret;
        }
        #endregion

这里返回一个point。然后下面:
            Point p = GetCursorPos(this.richTextBox1.Handle.ToInt32());
            this.statusStrip1.Items[2].Text = string.Format("第{0}行, 第{1}列", p.X, p.Y);

转眼就从编程菜鸟混成了半灌水
2008-10-14 08:29
shmilylee
Rank: 2
来 自:江苏扬州蹩脚小公司
等 级:论坛游民
威 望:2
帖 子:242
专家分:22
注 册:2007-7-6
收藏
得分:0 
这个很容易,用textBox自带的属性个方法就好了

以下是代码,界面上有3个textBox,textBox1是输入框,2和3分别是行号和坐标

private void textBox1_MouseCaptureChanged(object sender, EventArgs e)
        {
            TextBox t = sender as TextBox;
            test(t);
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            TextBox t = sender as TextBox;
            test(t);
        }

        private void test(TextBox box)
        {
            int a = box.SelectionStart;
            int b = box.GetLineFromCharIndex(a);
            int c = a - box.GetFirstCharIndexFromLine(b);
            this.textBox2.Text = (b + 1).ToString();
            this.textBox3.Text = c.ToString();
        }
就这么简单
2008-10-14 09:09
乖老鼠
Rank: 5Rank: 5
来 自:四川省
等 级:职业侠客
威 望:2
帖 子:434
专家分:394
注 册:2008-9-8
收藏
得分:0 
LS,如果换成rachTextBox呢?求解

转眼就从编程菜鸟混成了半灌水
2008-10-14 09:20
shmilylee
Rank: 2
来 自:江苏扬州蹩脚小公司
等 级:论坛游民
威 望:2
帖 子:242
专家分:22
注 册:2007-7-6
收藏
得分:0 
RichTextBox和TextBox一样,都有上述的方法和属性
不信你可以试试,将TextBox换成RichTextBox看看,效果是一样的!
2008-10-14 09:30
乖老鼠
Rank: 5Rank: 5
来 自:四川省
等 级:职业侠客
威 望:2
帖 子:434
专家分:394
注 册:2008-9-8
收藏
得分:0 
[bo][un]shmilylee[/un] 在 2008-10-14 09:30 的发言:[/bo]

RichTextBox和TextBox一样,都有上述的方法和属性
不信你可以试试,将TextBox换成RichTextBox看看,效果是一样的!

原来如此,多谢了

转眼就从编程菜鸟混成了半灌水
2008-10-14 10:15
Y08M09D26
Rank: 2
等 级:论坛游民
帖 子:118
专家分:13
注 册:2008-9-26
收藏
得分:0 
学 了 一 招
2008-10-14 13:17
skyzoneskyzone
Rank: 1
等 级:新手上路
威 望:1
帖 子:137
专家分:0
注 册:2008-10-6
收藏
得分:0 
不是很完美。
用上下左右键变动光标就没有反映了。
2008-10-14 13:19
shmilylee
Rank: 2
来 自:江苏扬州蹩脚小公司
等 级:论坛游民
威 望:2
帖 子:242
专家分:22
注 册:2007-7-6
收藏
得分:0 
要举一反三啊,加个
private void textBox1_KeyUp(object sender, KeyEventArgs e)
        {
            RichTextBox t = sender as RichTextBox;
            test(t);
        }
不就完了吗
2008-10-14 13:46
快速回复:怎么实现记事本里状态栏显示光标的行号和列号
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019517 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved