我有两个其他尺寸的pictureBoxes我怎么能做到这一点当我点击一个pictureBox它会在较小的pictureBox上画一个点?

时间:2013-12-04 23:09:38

标签: c# winforms

这是我的代码,但它在pictureBox2上根本没有绘制点。

public partial class Form1 : Form
    {
        private int counter;
        private int pb1mouse_x;
        private int pb1mouse_y;
        private int pbsize_x;
        private int pbsize_y;

        public Form1()
        {
            InitializeComponent();


            pbsize_x = pictureBox2.Width / pictureBox1.Width;
            pbsize_y = pictureBox2.Height / pictureBox1.Height;
            label4.Visible = false;
            label5.Visible = false;
            label6.Visible = false;
            counter = 0;
            pictureBox1.Load(@"d:\radar000075.png");


        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            label4.Visible = true;
            label4.Text = String.Format("X: {0}; Y: {1}", e.X, e.Y);
        }

        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                label5.Visible = true;
                label5.Text = String.Format("X: {0}; Y: {1}", e.X, e.Y);
                counter += 1;
                label6.Visible = true;
                label6.Text = counter.ToString();
                pb1mouse_x = e.X;
                pb1mouse_y = e.Y;
                pb1mouse_x = pb1mouse_x * pbsize_x;
                pb1mouse_y = pb1mouse_y * pbsize_y;
                pictureBox2.Invalidate();
            }
        }

        private void pictureBox2_Paint(object sender, PaintEventArgs e)
        {
            Pen p = new Pen(Color.Red);
            var g = e.Graphics;
            g.Clear(pictureBox1.BackColor);
            g.DrawEllipse(p, new Rectangle(pb1mouse_x, pb1mouse_y, 10, 10));
        }
    }

1 个答案:

答案 0 :(得分:1)

您应该能够简单地乘以因子,即smallBox.Width / largeBox.Width和smallBox.Height / largeBox.Height。将这些因子乘以较大框的坐标,它将为您提供较小框的坐标。

修改

这就是我的代码:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace PBoxes
{
    public partial class Form1 : Form
    {
        private float xFactor, yFactor;
        List<PointF> points = new List<PointF>();

        public Form1()
        {
            InitializeComponent();
            xFactor = (float)pictureBox2.Width / pictureBox1.Width;
            yFactor = (float)pictureBox2.Height / pictureBox1.Height;
        }

        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            points.Add(new PointF(e.X * xFactor, e.Y * yFactor));
            pictureBox2.Invalidate();
        }

        private void pictureBox2_Paint(object sender, PaintEventArgs e)
        {
            foreach (PointF pt in points)
            {
                e.Graphics.FillEllipse(Brushes.Red, pt.X, pt.Y, 3f, 3f);
            }
        }

        private void pictureBox_SizeChanged(object sender, EventArgs e)
        {
            xFactor = (float)pictureBox2.Width / pictureBox1.Width;
            yFactor = (float)pictureBox2.Height / pictureBox1.Height;
        }
    }
}