2012-06-05 12 views
-2

Я создал окна с несколькими кнопками. Теперь я хочу, чтобы, когда курсор указывает на каждую кнопку, кнопка выскочит или увеличит масштаб, и когда курсор удаляется с этой кнопки, он будет иметь нормальный размер.Есть ли способ масштабирования кнопок в C#?

+0

[что вы пробовали?] (Http://whathaveyoutrid.com) –

+0

Я думаю, что форма выигрыша не поддерживает такие графические эффекты. Попробуйте WPF. – davioooh

+0

davioooh, это может быть не так элегантно, как в WPF, но вы можете легко сделать то же самое в Windows Forms. – Joey

ответ

1

Вы можете изменить размер кнопки по коду в событии mouse-enter-event. и сбросьте его в событии mouse-leave-event.

+0

Не только размер, но и позиция (если вы не хотите увеличивать изображение в верхнем левом углу). Если кнопка закреплена или на панели макета становится сложнее, может быть. – Joey

+0

Я смущен. Не могли бы вы написать код. – user1436685

+0

Да, местоположение также необходимо изменить. – Tomtom

1

ya u можете изменить размер кнопки при вводе и удалении мыши или создать два изображения один является небольшим и другим большим и изменить изображение на эти события.

+0

Как? Не могли бы вы объяснить это? – user1436685

4

могли бы выглядеть примерно так:

Button.MouseEnter += new EventHandler(delegate(object Sender, EventArgs e) { Button.Size = new Size(Button.Size.Width + 50, Button.Size.Height + 50); } Button.Location = new Point(Button.Location.X - (50/2), Button.Location.Y - (50/2)}); 

Button.MouseLeave += new EventHandler(delegate(object Sender, EventArgs e) { Button.Size = new Size(Button.Size.Width - 50, Button.Size.Height - 50 }; Button.Location = new Point(Button.Location.X + (50/2), Button.Location.Y + (50/2)}); 

Button.GotFocus += new EventHandler(delegate(object Sender, EventArgs e) { Button.Size = new Size(Button.Size.Width + 50, Button.Size.Height + 50); } Button.Location = new Point(Button.Location.X - (50/2), Button.Location.Y - (50/2)}); 

Button.LostFocus += new EventHandler(delegate(object Sender, EventArgs e) { Button.Size = new Size(Button.Size.Width - 50, Button.Size.Height - 50 }; Button.Location = new Point(Button.Location.X + (50/2), Button.Location.Y + (50/2)}); 

Вы можете также цикл Повсеместно в «This.controls» событие, и определить каждую кнопку, а затем добавить это событие. Это скриптинг, вы можете сделать почти что угодно =)

+0

Так оно и должно работать. Но будь осторожен. Если вы выберете большие значения для масштабирования, тогда может случиться, что ваш зум-контроль накладывается на другой. – Tomtom

0

Вам придется обрабатывать события MouseEnter/MouseLeave и GotFocus/LostFocus для учета навигации по клавиатуре.

Эффекты, подобные этому, намного проще в приложениях WPF. Возможно, вам стоит подумать о создании WPF-приложения, если вам нужны визуальные эффекты. Проверьте Scale transform in xaml (in a controltemplate) on a button to perform a "zoom", где аналогичное требование обрабатывается путем масштабирования кнопки, таким образом, что вы можете прикреплять ее к любой кнопке, избегая писать код.

0

Самый простой способ заключается в использовании SetBounds. Control.Scale не работает, так как предполагает, что вы масштабируете полное окно, включая все дочерние элементы управления, и поэтому всегда будете масштабироваться в верхнем левом углу окна просмотра (в данном случае рамка клиентского окна).

Button b; 

    public Form1() 
    { 
     InitializeComponent(); 

     b = new Button(); 
     b.Text = "Hover me"; 
     b.Top = 100; 
     b.Left = 100; 
     b.Size = new Size(80, 30); 

     this.Controls.Add(b); 

     b.MouseEnter += delegate(object sender, EventArgs e) 
     { 
      b.SetBounds(b.Left - 5, b.Top - 2, b.Width + 10, b.Height + 4); 
     }; 
     b.MouseLeave += delegate(object sender, EventArgs e) 
     { 
      b.SetBounds(b.Left + 5, b.Top + 2, b.Width - 10, b.Height - 4); 
     }; 
    } 
+0

PLZ привести пример. – user1436685