根据鼠标点击区域判断是否启用拖动事件,随后根据自己的逻辑计算实际值
bool typeTop = false;
bool startDrag = false;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
startDrag = true;
startLocation = e.Location;
Point point = e.Location;
if (point.Y >= rect3.Y && point.Y <= rect3.Y + 5)
{
typeTop = true;
}
if (point.Y >= rect5.Y && point.Y <= rect5.Y + 5)
{
typeTop = false;
}
}
Point startLocation;
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (startDrag && e.Button == MouseButtons.Left)
{
//控件高度
int totalHight = pictureBox1.Height - 20;
Point mousePos = e.Location;
double d = totalHight + 10 - mousePos.Y;
double s = d * 1.0 / totalHight;
if (typeTop)
{
maxWarningLine1 = Math.Round( s * totalValue,2) + minValue;
if(maxWarningLine1 <= minWarningLine1)
{
maxWarningLine1 = minWarningLine1 + 1;
}
if(maxWarningLine1 >= maxValue)
{
maxWarningLine1 = maxValue;
}
}
else
{
minWarningLine1 = Math.Round(s * totalValue, 2) + minValue;
if(minWarningLine1 >= maxWarningLine1)
{
minWarningLine1 = maxWarningLine1 - 1;
}
if(minWarningLine1 <= minValue)
{
minWarningLine1 = minValue;
}
}
this.Invalidate(); // 触发重绘事件
}
}
拖动结束后触发事件
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
//startDrag = false;
RaiseMyCylinderEvent(typeTop, this.Name, maxWarningLine1, minWarningLine1);
}