Я рисую прямоугольную панель с каждой кнопкой. После этого добавьте строку на краю прямоугольника и текст по центру. Но когда я перетаскиваю панель на другую панель. Строка панели изменится. Пожалуйста посоветуй. Я не могу загрузить изображение. Как я могу загрузить изображение, подобное этому, может показать мою проблему более четко.Drawstring на панели меняются, когда другая панель перемещается над
Эта ссылка http://i3.photobucket.com/albums/y53/ctkhai/1-4.png показать gui моего программного обеспечения. В верхнем левом и нижнем левом углу расположены рамки. Пользователь добавляет «поле», когда нажимает кнопку один раз, и «поле» будет отображаться в левом верхнем углу. Пользователь может перетащить ящик в нижний правый угол и упорядочить все поля.
проблема заключается в том, что пользователь перетаскивает новый добавленный «ящик» и перемещается по другому «ящику», текст, который я рисую на предыдущем поле, будет меняться. как это http://i3.photobucket.com/albums/y53/ctkhai/2-4.png.
Обновление: Я пытаюсь создать класс для тега. но это не сработает, число снова изменится. Это способ создания класса для тега, а чтение неверно? код, как показано ниже
Product _box = new Product();
List<Panel>product = new List<Panel>();
public class Product
{
public float X { set; get; } //box coordinate
public float Y { set; get; } //box coordinate
public int rotate { set; get; }
public int entryP { set; get; }
public int boxName { set; get; }
}
private void button_RecAdd_Click(object sender, EventArgs e)
{
locX = pictureBox_conveyor.Left + (pictureBox_conveyor.Width/2 - box_y/2);
locY = pictureBox_conveyor.Top + (pictureBox_conveyor.Height/2 - box_x/2);
_box.boxName = panelBoxNo;
_box.entryP = 1;
_box.rotate = 0;
_box.X = locX;
_box.Y = locY;
Panel box = new Panel();
box.Location = new Point(locX, locY);
box.Name = "box" + panelBoxNo;
box.Tag = _box;
box.Size = new Size(box_y, box_x);
box.BackColor = boxColor;
pbW = box.Width;
pbH = box.Height;
box.MouseDown += panelBox_MouseDown;
box.MouseMove += panelBox_MouseMove;
box.Paint += new PaintEventHandler((s, m) =>
{
Graphics g = m.Graphics;
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;]
Product b = box.Tag as Product;
string text = b.boxName.ToString();
SizeF textSize = m.Graphics.MeasureString(text, Font);
PointF locationToDraw = new PointF();
locationToDraw.X = (pbW/2) - (textSize.Width/2);
locationToDraw.Y = (pbH/2) - (textSize.Height/2);
g.DrawString(text, Font, Brushes.Black, locationToDraw);
g.DrawRectangle(new Pen(Color.Black), 0, 0, pbW - 1, pbH - 1);
g.DrawLine(drawLine, 0, 0, 0, pbH);
});
product.Add(box);
panel_pelletLayout.Controls.Add(box);
box.BringToFront();
label_boxNo.Text = panelBoxNo.ToString();
panelBoxNo++;
}
private void panelBox_MouseDown(object sender, MouseEventArgs e)
{
Panel p = sender as Panel;
if (e.Button == MouseButtons.Left)
{
xPos = e.X;
yPos = e.Y;
if (p != null)
{
activePnlBox = p.Name;
textBox_selectedName.Text = p.Name;
textBox_selectedX.Text = p.Left.ToString();
textBox_selectedY.Text = p.Top.ToString();
}
}
}
private void panelBox_MouseMove(object sender, MouseEventArgs e)
{
Panel p = sender as Panel;
if (p != null)
{
if (e.Button == MouseButtons.Left)
{
p.Left = ((e.X + p.Left - (p.Width/2))/gripGap) * gripGap;
p.Top = ((e.Y + p.Top - (p.Height/2))/gripGap) * gripGap;
textBox_selectedX.Text = p.Left.ToString();
textBox_selectedY.Text = p.Top.ToString();
}
}
}
Загрузить изображение где-нибудь еще и поделиться ссылкой, я добавлю его в вашем после. –
Можете ли вы разместить обработчики mouseDown и mouseMove тоже –
Привет @TaW, но мне нужно, чтобы пользователь добавил несколько ящиков с нажатием кнопки, после чего перегруппируйте поле. проблема в том, что не знаю, сколько добавит пользователь box. –