请教从VB转到C#后,怎样实现如下几个功能 在VB里很容易实现如下功能,但在C#里怎样实现呢?请大家指点一下,谢谢!!(1)窗体总在前面(2)窗体透明(3)在非标题栏中拖动窗体 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 (1); Me.TopMost = True(2): Me.Opacity = 0.5第三个你要自己写onmousedown事件配合onmousemove 参看http://blog.csdn.net/knight94/archive/2006/05/11/724967.aspx (3)在非标题栏中拖动窗体处理WM_NCHITTEST消息效果比较好。 第一个问题:哈哈,原来.net把这种功能变成了属性(已解决)第二个问题:直接改Opacity的值是可以使窗体透明,不过连窗体上的控件也透明了,不是我想要的。后来利用修改TransparencKey的值达到窗体透明,但控件不透明(已解决)第三个问题:在1楼与5楼的朋友指点下,找到以下两段代码:(1)private const int WM_NCHITTEST = 0x84;private const int HTCLIENT = 0x1;private const int HTCAPTION = 0x2;protected override void WndProc(ref Message m) { switch(m.Msg) { case WM_NCHITTEST: base.WndProc(ref m); if ((int)m.Result == HTCLIENT) m.Result = (IntPtr)HTCAPTION; return; break; } base.WndProc(ref m); }以上代码是可以实现拖动窗体,不过如果想拖动一个label来实现拖动窗体的话,要用代码2(2)using System.Runtime.InteropServices;public partial class KyanForm : Form { [DllImport("User32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam); [DllImport("User32.dll", EntryPoint = "ReleaseCapture")] private static extern int ReleaseCapture(); public KyanForm() { InitializeComponent(); } private void KyanForm_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { ReleaseCapture(); SendMessage(this.Handle.ToInt32(), 0x0112, 0xF012, 0); } } 用代码2就能解决我想要的问题。 一下,C#哪有me哦 ,看来是VB用惯了,呵呵 DotNET的资源占用是个问题,因为要加载运行库,所以至少也要10几M内存。如果非常恶劣的环境下考虑效率问题,C#不是很好的选择。 C# 关于打印 动态创建的Chekcbox,但是CheckedChanged不执行? C#实现用链式纸打印几条很长的曲线,如果实现?请高手指点! 【菜鸟发问】一个非常简单的向数据库中插入数据的问题! 关于模拟表单... ShowDialog问题 网络问题谁能帮解决下 numericupdown 控件如何让它只能输入5位数字,且小数点后只能是两位.求助! C#怎么解压一个文件 监视一个目录中文件的变化,在线等待 关于c#调用动态库dll的问题 填充表時太慢了,失望中。。,求高手指點?
(2): Me.Opacity = 0.5第三个你要自己写onmousedown事件配合onmousemove
http://blog.csdn.net/knight94/archive/2006/05/11/724967.aspx
处理WM_NCHITTEST消息效果比较好。
(1)
private const int WM_NCHITTEST = 0x84;
private const int HTCLIENT = 0x1;
private const int HTCAPTION = 0x2;protected override void WndProc(ref Message m)
{
switch(m.Msg)
{
case WM_NCHITTEST:
base.WndProc(ref m);
if ((int)m.Result == HTCLIENT)
m.Result = (IntPtr)HTCAPTION;
return;
break;
}
base.WndProc(ref m);
}
以上代码是可以实现拖动窗体,不过如果想拖动一个label来实现拖动窗体的话,要用代码2
(2)
using System.Runtime.InteropServices;
public partial class KyanForm : Form
{
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam);
[DllImport("User32.dll", EntryPoint = "ReleaseCapture")]
private static extern int ReleaseCapture(); public KyanForm()
{
InitializeComponent();
} private void KyanForm_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(this.Handle.ToInt32(), 0x0112, 0xF012, 0);
}
}
用代码2就能解决我想要的问题。
如果非常恶劣的环境下考虑效率问题,C#不是很好的选择。