C#,Winform如何做出显示文字没有焦点但是可以复制的效果?类似网页。 200
通常我都只是用个textbox,做成只读,但是很难看,类似网页上的文字显示是怎么做到的呢?或者.net有无自带的控件可以实现呢?...
通常我都只是用个textbox,做成只读,但是很难看,类似网页上的文字显示是怎么做到的呢?或者.net有无自带的控件可以实现呢?
展开
11个回答
展开全部
using System.Runtime.InteropServices;//加这个命名空间
namespace SY1
{
public partial class Form1 : Form
{
[DllImport("user32.dll", EntryPoint = "HideCaret")]
public static extern bool HideCaret(IntPtr hWnd);//用这个API
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
IntPtr hWnd = textBox1.Handle;
HideCaret(hWnd);//获得焦点时调用
}
}
}
然后把TextBox的边框设成None ,改成只读就可以了。
还有一个不用API的变通的办法,
就是你再放一个隐藏的textBox2在form里
然后
private void textBox1_MouseUp(object sender, MouseEventArgs e)
{
textBox2.Focus();
}
private void textBox1_MouseClick(object sender, MouseEventArgs e)
{
textBox2.Focus();
}
也能达到你说的目的,但不是一个好办法。
另外不明白你为什么不用API现成的方法,而要自己去写。
说白textBox2.Focus()也是API,只不过.net给你封装好了可以直接用罢了。
namespace SY1
{
public partial class Form1 : Form
{
[DllImport("user32.dll", EntryPoint = "HideCaret")]
public static extern bool HideCaret(IntPtr hWnd);//用这个API
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
IntPtr hWnd = textBox1.Handle;
HideCaret(hWnd);//获得焦点时调用
}
}
}
然后把TextBox的边框设成None ,改成只读就可以了。
还有一个不用API的变通的办法,
就是你再放一个隐藏的textBox2在form里
然后
private void textBox1_MouseUp(object sender, MouseEventArgs e)
{
textBox2.Focus();
}
private void textBox1_MouseClick(object sender, MouseEventArgs e)
{
textBox2.Focus();
}
也能达到你说的目的,但不是一个好办法。
另外不明白你为什么不用API现成的方法,而要自己去写。
说白textBox2.Focus()也是API,只不过.net给你封装好了可以直接用罢了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
非常简单,你直接放一个webBrowser1控件,然后
webBrowser1.DocumentText = "just a test";
webBrowser1.ScrollBarsEnabled = false;
就可以了。
webBrowser1.DocumentText = "just a test";
webBrowser1.ScrollBarsEnabled = false;
就可以了。
更多追问追答
追问
那我就是问webBrowser的效果是怎么做出来的。
追答
WebBrowser是WinForm的控件之一,直接拉一个控件到WinForm窗体,加上上面的两句代码就可以达到你想要的效果。
其基本原理是把系统自带的IE窗口嵌入到webBrowser控件中,以呈现你所需的页面。
至于IE的解析过程,本身是极其复杂的,只不过它被优化到效率特别快而已。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
using System.Runtime.InteropServices;//加这个命名空间
namespace SY1
{
public partial class Form1 : Form
{
[DllImport("user32.dll", EntryPoint = "HideCaret")]
public static extern bool HideCaret(IntPtr hWnd);//用这个API
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
IntPtr hWnd = textBox1.Handle;
HideCaret(hWnd);//获得焦点时调用
}
}
}
然后把TextBox的边框设成None ,改成只读就可以了。
不谢~
namespace SY1
{
public partial class Form1 : Form
{
[DllImport("user32.dll", EntryPoint = "HideCaret")]
public static extern bool HideCaret(IntPtr hWnd);//用这个API
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
IntPtr hWnd = textBox1.Handle;
HideCaret(hWnd);//获得焦点时调用
}
}
}
然后把TextBox的边框设成None ,改成只读就可以了。
不谢~
更多追问追答
追问
请看我另外一个追问,虽然说你会用这个api说明你确实很厉害,但是我已经说了不要用api来修改textbox了,最好是继承自control的控件。
追答
还有一个不用API的变通的办法,
就是你再放一个隐藏的textBox2在form里
然后
private void textBox1_MouseUp(object sender, MouseEventArgs e)
{
textBox2.Focus();
}
private void textBox1_MouseClick(object sender, MouseEventArgs e)
{
textBox2.Focus();
}
也能达到你说的目的,但不是一个好办法。
另外不明白你为什么不用API现成的方法,而要自己去写。
说白textBox2.Focus()也是API,只不过.net给你封装好了可以直接用罢了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Form_Load 事件中,FORM并没有展现出来,只是加载相应的资源和组件。此时组件仍不可见,所以Focus事件不会生效。可以在 Shown 事件 或者 Actived 事件里,设置 focus
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
lable 是可以做到复制的。。我给你写了一个demo 可以发给你看下。QQ: 953954891
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询