c#仪表指针旋转

qq_37834095 2020-03-24 02:58:40
请教下,鼠标事件里怎么让鼠标在绘制的仪表上移动,仪表指针也会随着旋转啊,请求指导。。。谢谢
我是在图片上获取鼠标的位置的,把这横轴范围映射到对应0到100的范围里,发现这样会出现误差。。。;有好点的实现方法吗
...全文
336 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_37834095 2020-03-25
  • 打赏
  • 举报
回复
啊,你都不重绘吗?我现在可以了,让重绘函数实现了动作,我再想把它作为滑块,显示数值就可以关联仪表指针的值
Bridge_go 2020-03-25
  • 打赏
  • 举报
回复
只要这一个事件

private void panel1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)//鼠标在该控件上按下
    {
        Graphics g = panel1.CreateGraphics();
        g.Clear(this.panel1.BackColor);
        g.FillRectangle(new SolidBrush(Color.FromArgb(90, 200, 80)), 0, 0, e.X, this.panel1.Height);
    }
}
qq_37834095 2020-03-25
  • 打赏
  • 举报
回复
[quote=引用 2 楼 desperaso 的回复:]
按照盘子的形状调整长度(圆上的点),这里省事就按鼠标位置画了个线,就这么个意思了

麻烦看看我这个是什么原因啊

qq_37834095 2020-03-25
  • 打赏
  • 举报
回复
哎,。。。看看这个水平移动条呢?我画了一个
是在控件里画的,我移动鼠标得到的绿色部分无法刷新呢
我的代码如下:
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics g;
g = panel1.CreateGraphics();
Pen pn1 = new Pen(Color.FromArgb(200, 200, 0), panel1.Height);
Point cer = new Point(0, 0);
Size re = new Size(panel1.Width / 16, panel1.Height);
g.DrawRectangle(pn1, cer.X, cer.Y, re.Width, re.Height);

}

private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)//鼠标在该控件上按下
{

Graphics g = panel1.CreateGraphics();

Pen pn1 = new Pen(Color.FromArgb(90, 200, 80), panel1.Height);
Point cer = new Point(0, 0);

newX = cer.X+e.X;
newY = cer.Y;
Invalidate();
}

}

protected override void OnPaint(PaintEventArgs e)
{//自定义重绘
base.OnPaint(e);
Graphics g;
g = panel1.CreateGraphics();
Pen pn1 = new Pen(Color.FromArgb(90, 200, 80), panel1.Height);
Size re = new Size(panel1.Width / 16, panel1.Height);
g.DrawRectangle(pn1, newX, newY, re.Width, re.Height);

}
如果我用Refresh()也不会刷新呢,绿色部分只会增加不会减少呢?
Bridge_go 2020-03-24
  • 打赏
  • 举报
回复
desperaso 2020-03-24
  • 打赏
  • 举报
回复
按照盘子的形状调整长度(圆上的点),这里省事就按鼠标位置画了个线,就这么个意思了

public Form1()
{
InitializeComponent();

bool press = false;
Point[] line_point = new Point[] { new Point(100, 100), new Point(100, 20) };
Panel panel = new Panel()
{
Size = new Size(200, 200),
Location = new Point(10,10),
BackColor = Color.White,
};
panel.Paint += (s,e)=>
{
Graphics g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias;
Pen pen = new Pen(Color.SteelBlue, 2);
g.DrawLine(pen, line_point[0], line_point[1]);
};
panel.MouseDown += (s, e) => { press = true; line_point[1] = new Point(e.X, e.Y); panel.Invalidate(); };
panel.MouseUp += (s, e) => { press = false; };
panel.MouseMove += (s, e) => { if (press) { line_point[1] = new Point(e.X, e.Y); panel.Invalidate(); } };
this.Controls.Add(panel);
}
lindexi_gd 2020-03-24
  • 打赏
  • 举报
回复
你看看这个是否符合你需要

win10 uwp 车表盘 径向规

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧