0
点赞
收藏
分享

微信扫一扫

[原创]c#巧用鼠标的状态图标修改给人错觉实现拖拽修改


原理就是鼠标移动到边界的时候就修改鼠标状态
如果按下则把移动标记打开,抬起或者离开则把鼠标标记再锁上,
移动到有效位置图标也修改了,所以错觉完成了一个拖拽功能。

private void panel_keyboard_head_MouseUp(object sender, MouseEventArgs e)
{
this.Cursor = Cursors.Default;
LogUtil.writeLog("鼠标抬起了。");
mEnableMoveFlag = false;
}

private void panel_keyboard_head_MouseMove(object sender, MouseEventArgs e)
{

this.Cursor = Cursors.Default;
Control control = (Control)sender;
if (locationIsAtKeyboardEdge(e, panel_keyboard_head.Height))
{
this.Cursor = Cursors.SizeNS;
LogUtil.writeLog("位置正确。");
//mEnableMoveFlag = true;
}
else
{
LogUtil.writeLog("位置不正确。");
this.Cursor = Cursors.Default;
}

if (mEnableMoveFlag)
{
panel_keyboard_head.Height = e.Y;
keyboard.keyboardHeader.getHeight().setValue(e.Y);
updateKeybaordBodyAndHeadHeight();
if (mAutoChangeMode)
{
jsonObject2Text();
}
}
else
{
LogUtil.writeLog("处于锁定状态 等待设置,等待按下");
}
}

private void panel_keyboard_head_MouseDown(object sender, MouseEventArgs e)
{
if (this.Cursor == Cursors.SizeNS)
{
LogUtil.writeLog("属于有效区域 允许拖拽");
mEnableMoveFlag = true;
}
else
{
LogUtil.writeLog("按下但是不是有效区域 不允许拖拽");
}




}

private void panel_keyboard_head_MouseLeave(object sender, EventArgs e)
{
this.Cursor = Cursors.Default;
mEnableMoveFlag = false;
LogUtil.writeLog("鼠标松开了。");

边界判断

public bool locationIsAtKeyboardEdge(MouseEventArgs e,int locationY)
{
//int totalHeight = tabPage_preview_phone_height.Height;
//int top = totalHeight - panel_keyboard.Height;
//Cursor.Current = new Cursor(@"C:\my.cur");
//OR: Cursor Cur = new Cursor(@"C:\my.cur");
//this.Cursor = Cur;
int distance = e.Y - locationY;
if (Math.Abs(distance) > 3)
{
// LogUtil.writeLog("逻辑不成立 top");
return false;
}
else
{
// LogUtil.writeLog("逻辑成立 相差" + distance);
return true;
}


}

和安卓一样,这个坐标体系也差不多,x 代表的是在于父容器自身的x距离。




[原创]c#巧用鼠标的状态图标修改给人错觉实现拖拽修改_spring


image.png

举报

相关推荐

0 条评论