2个回答
展开全部
写一个类 继承他 或者 其实主要写一个方法 MouseDown事件鼠标点击的时候,设计一个属性标识可移动,MouseMove事件更改它的坐标
添加一个组件继承TEXTBOX 例如 :我写了一个 可以移动
namespace Windows
{
public partial class MyTextBox : TextBox
{
public MyTextBox()
{
InitializeComponent();
this.MouseDown += new MouseEventHandler(MyTextBox_MouseDown);
this.MouseUp += new MouseEventHandler(MyTextBox_MouseUp);
this.MouseMove += new MouseEventHandler(MyTextBox_MouseMove);
}
private bool isDrag = false;
void MyTextBox_MouseMove(object sender, MouseEventArgs e)
{
if (isDrag)
{
this.Location = this.FindForm().PointToClient(this.PointToScreen(e.Location));
this.Refresh();
}
}
void MyTextBox_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (isDrag)
{
//textBox1.Location = e.Location;
this.Refresh();
isDrag = false;
}
}
}
void MyTextBox_MouseDown(object sender, MouseEventArgs e)
{
isDrag = true;
}
}
}
可以再修改 其实 可以先缓存一个Rectangle 对象 移动对象 我这里提供一个简单移动的方法 可以进行一部分的优化 设置一个属性开启移动
若是WEB 程序 可以使用脚步 我这里写一个
<script type="text/javascript">
var ids = 0;
var l;
var t;
//清除选中状态
function setidclear() {
ids = 0;
}
//设置选中状态
function setID(id) {
ids = id;
var ev = event;
var mousePos = mouseCoords(ev);
var detailDiv = document.getElementById(ids); //要移动的层
l = (mousePos.x) - detailDiv.style.left.replace("px", "");
t = (mousePos.y) - detailDiv.style.top.replace("px", "");
}
//移动跟随
function mouseMove() {
if (ids != 0) {
var ev = event;
var mousePos = mouseCoords(ev);
var detailDiv = document.getElementById(ids); //要移动的层
var mouseX = (mousePos.x);
var mouseY = (mousePos.y);
detailDiv.style.left = mouseX - l + "px";
detailDiv.style.top = mouseY - t + "px";
//缺少容器溢出代码
}
}
function mouseCoords(ev) {
if (ev.pageX || ev.pageY) {
return {
x: ev.pageX,
y: ev.pageY
};
}
return {
x: ev.clientX + document.documentElement.scrollLeft - document.documentElement.clientLeft,
y: ev.clientY + document.documentElement.scrollTop - document.documentElement.clientTop
};
}
function showWindow() {
var window = document.getElementById("window");
window.style.display = "";
}
</script>
调用方法
<input type="text" id="txt" onmousedown="setID(this.id)" onmouseup="clear()"/> 在控件内
<body onmousemove="mouseMove()" onmouseup="setidclear()" style="background-color: Gray">
添加一个组件继承TEXTBOX 例如 :我写了一个 可以移动
namespace Windows
{
public partial class MyTextBox : TextBox
{
public MyTextBox()
{
InitializeComponent();
this.MouseDown += new MouseEventHandler(MyTextBox_MouseDown);
this.MouseUp += new MouseEventHandler(MyTextBox_MouseUp);
this.MouseMove += new MouseEventHandler(MyTextBox_MouseMove);
}
private bool isDrag = false;
void MyTextBox_MouseMove(object sender, MouseEventArgs e)
{
if (isDrag)
{
this.Location = this.FindForm().PointToClient(this.PointToScreen(e.Location));
this.Refresh();
}
}
void MyTextBox_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (isDrag)
{
//textBox1.Location = e.Location;
this.Refresh();
isDrag = false;
}
}
}
void MyTextBox_MouseDown(object sender, MouseEventArgs e)
{
isDrag = true;
}
}
}
可以再修改 其实 可以先缓存一个Rectangle 对象 移动对象 我这里提供一个简单移动的方法 可以进行一部分的优化 设置一个属性开启移动
若是WEB 程序 可以使用脚步 我这里写一个
<script type="text/javascript">
var ids = 0;
var l;
var t;
//清除选中状态
function setidclear() {
ids = 0;
}
//设置选中状态
function setID(id) {
ids = id;
var ev = event;
var mousePos = mouseCoords(ev);
var detailDiv = document.getElementById(ids); //要移动的层
l = (mousePos.x) - detailDiv.style.left.replace("px", "");
t = (mousePos.y) - detailDiv.style.top.replace("px", "");
}
//移动跟随
function mouseMove() {
if (ids != 0) {
var ev = event;
var mousePos = mouseCoords(ev);
var detailDiv = document.getElementById(ids); //要移动的层
var mouseX = (mousePos.x);
var mouseY = (mousePos.y);
detailDiv.style.left = mouseX - l + "px";
detailDiv.style.top = mouseY - t + "px";
//缺少容器溢出代码
}
}
function mouseCoords(ev) {
if (ev.pageX || ev.pageY) {
return {
x: ev.pageX,
y: ev.pageY
};
}
return {
x: ev.clientX + document.documentElement.scrollLeft - document.documentElement.clientLeft,
y: ev.clientY + document.documentElement.scrollTop - document.documentElement.clientTop
};
}
function showWindow() {
var window = document.getElementById("window");
window.style.display = "";
}
</script>
调用方法
<input type="text" id="txt" onmousedown="setID(this.id)" onmouseup="clear()"/> 在控件内
<body onmousemove="mouseMove()" onmouseup="setidclear()" style="background-color: Gray">
追问
可不可以给个winform的例子
追答
上面就是WINFORM 的类啊 创建一个组件 把代码拷贝上去 然后就可以看到你的工具栏就一个组件 拉进去就可以运行了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询