caozhy网友给我了以下答案:protected override void WndProc(ref Message m)
{
if (m.Msg != (int)WinMsg.WM_GETTEXT) base.WndProc(ref m);
}public enum WinMsg : int
{
...
WM_GETTEXT = 0x000D,
...
} 这一方法,可以阻止密码查看器获取密码,但也导致通过txtBox1.Text属性得不到值了,请问如何解决?
{
if (m.Msg != (int)WinMsg.WM_GETTEXT) base.WndProc(ref m);
}public enum WinMsg : int
{
...
WM_GETTEXT = 0x000D,
...
} 这一方法,可以阻止密码查看器获取密码,但也导致通过txtBox1.Text属性得不到值了,请问如何解决?
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
myTextBox1.CheckPass = myTextBox1.Handle.ToInt32() * 2;
String strText = myTextBox1.Text;
myTextBox1.CheckPass = 0;
MessageBox.Show(strText);
}
} public class MyTextBox : TextBox
{
private Int32 _CheckPass; public Int32 CheckPass
{
get
{
return _CheckPass;
}
set
{
_CheckPass = value;
}
} protected override void WndProc(ref Message m)
{
if (m.Msg == 0x000D)
{
if (CheckPass != m.HWnd.ToInt32() * 2)
{
return;
}
} base.WndProc(ref m);
}
}
}
应该是可以的,不过获取前后都要更新设置,麻烦,应该还能优化点
或者还有更好的方法
做好控件再导入到winform中用
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
myTextBox1.CheckPass = myTextBox1.Handle.ToInt32() * 2;
String strText = myTextBox1.Text;
myTextBox1.CheckPass = 0;
MessageBox.Show(strText);
}
}
}//创建的组件 MyTextBox
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
public partial class MyTextBox : TextBox
{
public MyTextBox()
{
InitializeComponent();
} public MyTextBox(IContainer container)
{
container.Add(this); InitializeComponent();
} private Int32 _CheckPass; public Int32 CheckPass //也可以扩展增加一个是否允许获取密码的布尔值属性,这样写起来更方便
{
get
{
return _CheckPass;
}
set
{
_CheckPass = value;
}
} protected override void WndProc(ref Message m)
{
if (m.Msg == 0x000D)
{
if (CheckPass != m.HWnd.ToInt32() * 2)
{
return;
}
} base.WndProc(ref m);
}
}
}