Как сделать так, чтобы расположение и размер кнопки менялись в зависимости от размера окна изображения
Теперь у меня есть picturebox в форме окна, и я разместил много кнопок на picturebox.Я добился изменения размера изображения, сдвинув среднюю кнопку мыши,но я не знаю, как заставить все кнопки меняться вместе с picturebox, включая расположение и размер кнопки. Кто может протянуть мне руку помощи.
Что я уже пробовал:
Я попытался решить эту проблему. Коды снова в и net2013 следующим образом:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace ImageScale { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.StartPosition = FormStartPosition.CenterScreen; this.pictureBox1.BorderStyle = BorderStyle.FixedSingle; this.pictureBox1.BackColor = Color.DarkGray; this.pictureBox1.MouseWheel += new MouseEventHandler(pictureBox1_MouseWheel); } Bitmap m_bmp; Point m_ptCanvas; Point m_ptCanvasBuf; Point m_ptBmp; float m_nScale = 1.0F; Point m_ptMouseDown; string m_strMousePt; private void Form1_Load(object sender, EventArgs e) { m_bmp = Properties.Resources.QQ20170722225306; m_ptCanvas = new Point(pictureBox1.Width / 2, pictureBox1.Height / 2); m_ptBmp = new Point(-(m_bmp.Width / 2), -(m_bmp.Height / 2)); } } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); } private void pictureBox1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.TranslateTransform(m_ptCanvas.X, m_ptCanvas.Y); g.ScaleTransform(m_nScale, m_nScale); g.DrawImage(m_bmp, m_ptBmp); g.ResetTransform(); } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Middle) { m_ptMouseDown = e.Location; m_ptCanvasBuf = m_ptCanvas; } pictureBox1.Focus(); } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Middle) { m_ptCanvas = (Point)((Size)m_ptCanvasBuf + ((Size)e.Location - (Size)m_ptMouseDown)); pictureBox1.Invalidate(); } } private void pictureBox1_MouseWheel(object sender, MouseEventArgs e) { if (m_nScale <= 0.3 && e.Delta <= 0) return; if (m_nScale >= 4.9 && e.Delta >= 0) return; SizeF szSub = (Size)m_ptCanvas - (Size)e.Location; float tempX = szSub.Width / m_nScale; float tempY = szSub.Height / m_nScale; m_ptCanvas.X -= (int)(szSub.Width - tempX); m_ptCanvas.Y -= (int)(szSub.Height - tempY); szSub.Width = tempX; szSub.Height = tempY; m_nScale += e.Delta > 0 ? 0.2F : -0.2F; m_ptCanvas.X += (int)(szSub.Width * m_nScale - szSub.Width); m_ptCanvas.Y += (int)(szSub.Height * m_nScale - szSub.Height); pictureBox1.Invalidate(); }
Graeme_Grant
Ваши кнопки не упоминаются в приведенном выше коде, кроме как в PictureBox. Что такое родительский элемент управления для кнопок и как вы их "закрепили"?
BillWoodruff
Независимо от проблемы с кнопками (пожалуйста, ответьте на вопрос Грэма): рассматривали ли вы возможность просто установить изображение PictureBox один раз и установить "SizeMode" на "StretchImage"?
Почему вы хотите масштабировать размер кнопок: в WinForms шрифты не будут хорошо масштабироваться до произвольных размеров.
Являются ли кнопки " на " PictureBox для обозначения связи между определенной точкой или областью изображения и чем-то еще ? Если это так, то не означает ли произвольное масштабирование или панорамирование изображения, что кнопки могут не отображаться ?
fwloveme
Я поместил элемент управления PictureBox на панель контейнера, и некоторые кнопки на элементе управления PictureBox.Теперь положение кнопок произвольно, я хочу выполнить некоторые функции: положение и размер кнопки могут изменяться при изменении изображения в picturebox,а pixturebox "SizeMode" - "AutoSize", а "Dock" - "None", контейнер панели "AutoScroll" - true.
BillWoodruff
Итак, вы хотите, чтобы кнопки были привязаны к определенным точкам изображения ? Как HTML-клиентская карта изображений ?
Как вы решаете, куда идут кнопки ?
Когда вы прокручиваете изображение на панели, кнопки исчезают с экрана ?
Посмотрите, дадут ли они вам какие-то идеи:
https://github.com/EWSoftware/ImageMaps
https://www.codeproject.com/Articles/2820/C-Windows-Forms-ImageMap-Control