#c# #winforms #picturebox
#c# #winforms #picturebox
Вопрос:
Я добавил поле изображения внутри панели вкладок. Я пытаюсь применить к нему операцию увеличения и уменьшения масштаба. На самом деле обе операции работают нормально, но я хочу увеличивать и уменьшать масштаб операции, которые работают с положением мыши. означает увеличение/уменьшение масштаба изображения при наведении курсора или при наведении мыши.
Мой код приведен ниже
protected override void OnMouseWheel(MouseEventArgs e)
{
if (_isZoomInFlag == true)
{
zoomInt ;
if (zoomInt > 4)
{
zoomInt = 4;
}
zoomPicturebox();
}
if (_isZoomOutFlag == true)
{
zoomInt--;
if (zoomInt == -3)
{
zoomInt = -2;
}
zoomPicturebox();
}
}
public void zoomPicturebox()
{
pbDisplay.Width = picWidth;
pbDisplay.Height = picHeight;
switch (zoomInt)
{
case -2:
pbDisplay.Width = Convert.ToInt32(((double)pbDisplay.Width) * 0.25);
pbDisplay.Height = Convert.ToInt32(((double)pbDisplay.Width) * picRatio);
break;
case -1:
pbDisplay.Width = Convert.ToInt32(((double)pbDisplay.Width) * 0.5);
pbDisplay.Height = Convert.ToInt32(((double)pbDisplay.Width) * picRatio);
break;
case 0:
pbDisplay.Width = picWidth;
pbDisplay.Height = picHeight;
break;
case 1:
pbDisplay.Width = Convert.ToInt32(((double)pbDisplay.Width) * 1.1);
pbDisplay.Height = Convert.ToInt32(((double)pbDisplay.Width) * picRatio);
break;
case 2:
pbDisplay.Width = Convert.ToInt32(((double)pbDisplay.Width) * 1.5);
pbDisplay.Height = Convert.ToInt32(((double)pbDisplay.Width) * picRatio);
break;
case 3:
pbDisplay.Width = Convert.ToInt32(((double)pbDisplay.Width) * 1.75);
pbDisplay.Height = Convert.ToInt32(((double)pbDisplay.Width) * picRatio);
// lblZoom.Text = ("Zoom = 175%");
break;
case 4:
pbDisplay.Width = Convert.ToInt32(((double)pbDisplay.Width) * 2);
pbDisplay.Height = Convert.ToInt32(((double)pbDisplay.Width) * picRatio);
break;
}
pbDisplay.Update();
}
Увеличьте масштаб изображения
Уменьшить изображение
Комментарии:
1. означает увеличение/уменьшение масштаба изображения при наведении курсора или при наведении мыши. Я не знаю, что все это значит
2. @Rang Да увеличение / уменьшение масштаба при обработке положения курсора мыши когда я попробовал эту функцию, фактическое положение мыши находится в другом месте, а увеличение / уменьшение масштаба — в другом месте. Я хочу управлять увеличением / уменьшением масштаба при наведении курсора мыши.
3. да, увеличение / уменьшение масштаба в другом месте. но как его вызвать? щелчок? наведите курсор мыши? или что-то еще?
4. @Rang srry, потому что я использовал неправильное событие мыши, на самом деле это событие OnMouseWheel вместо MouseMove. Я обновил код. Это на колесе мыши…
5. вы хотите увеличивать / уменьшать масштаб, когда мышь перемещается по изображению и использует колесо?
Ответ №1:
в picturebox есть событие MouseWheel, но сначала вам нужно сфокусировать его.
public Form1()
{
InitializeComponent();
pictureBox1.MouseWheel = pictureBox1_MouseWheel;
}
void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
{
if(e.Delta > 0)
{
//up
}
else
{
//down
}
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
pictureBox1.Focus();
}
здесь, в событии mousedown, сфокусируйте его и сделайте событие wheel активным. затем вы можете сделать это в своем коде.
Комментарии:
1. на самом деле никаких изменений нет, его функциональность работает так же, как я хочу увеличивать и уменьшать масштаб на колесе мыши в месте расположения курсора
2. Я не вижу в коде ничего, что позволило бы увеличить масштаб в положении курсора.