c#仪表指针旋转

请教下,鼠标事件里怎么让鼠标在绘制的仪表上移动,仪表指针也会随着旋转啊,请求指导。。。谢谢
我是在图片上获取鼠标的位置的,把这横轴范围映射到对应0到100的范围里,发现这样会出现误差。。。;有好点的实现方法吗

你看看这个是否符合你需要

win10 uwp 车表盘 径向规

按照盘子的形状调整长度(圆上的点),资源下载这里省事就按鼠标位置画了个线,就这么个意思了

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);

        }

哎,。。。看看这个水平移动条呢?我画了一个
是在控件里画的,我移动鼠标得到的绿色部分无法刷新呢
我的代码如下:
 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()也不会刷新呢,绿色部分只会增加不会减少呢?

按照盘子的形状调整长度(圆上的点),这里省事就按鼠标位置画了个线,就这么个意思了

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

只要这一个事件


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);
    }
}

 

啊,你都不重绘吗?我现在可以了,让重绘函数实现了动作,我再想把它作为滑块,显示数值就可以关联仪表指针的值

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值