У меня есть перечисление:Изменение переменной во время выполнения
type Tool =
| Rectangle = 0
| Circle = 1
и переменную для хранения значения перечисления:
let mutable selectedTool : Tool = Tool.Rectangle
У меня есть две кнопки:
let btn (location:Point) (size:Size) =
let bt = new Button()
do bt.Location <- location
do bt.Size <- size
bt
// These badboys right here:
let rectangleButton = btn (Point(0, 0)) (Size(50,50))
let ellipseButton = btn (Point(50, 0)) (Size(50,50))
У каждого из них есть связанное с ними событие:
let btnRectEvent = rectangleButton.Click.Add(fun(x) -> selectedTool <-Tool.Rectangle)
let btnElliEvent = ellipseButton.Click.Add(fun(x) -> selectedTool <- Tool.Circle)
Я хочу, чтобы мои события изменяли значение переменной selectedTool. В настоящее время он не работает.
Я тогда записать свое событие MouseDown на моей области рисования, чтобы нарисовать фигуру с помощью этого события:
let mouseEvent =
let x = selectedTool
form.MouseDown
|> Event.add (fun (evArgs1) ->
if x = Tool.Circle then
graphics.Graphics.DrawEllipse(whitePen, evArgs1.X, evArgs1.Y, 15, 15)
else
graphics.Graphics.DrawRectangle(whitePen, evArgs1.X, evArgs1.Y, 15, 15)
form.Refresh())
форма работает следующим образом:
form.Controls.Add(rectangleButton)
form.Controls.Add(ellipseButton)
form.Show()
while form.Created do
Application.DoEvents()
бонусный вопрос, но не нуждается в ответе:
Можно ли поймать событие щелчка на кнопке, дождаться события mousedown на области рисования, поместить первый угол моей фигуры, предварительно просмотреть фигуру, когда я перемещаю мою мышь, и установить вторую угол на mouseUp, в не слишком-overkill образом?
TL; вопрос с бонусом DR: могу ли я легко сделать работу с прямоугольником, как в MSPaint?
Почему вы не используете 'Application.Run (new form())'? Кроме того, попробуйте поставить printf в событиях –
Потому что я не знал о его существовании. Спасибо :) Кроме того, я поставил следующее, чтобы проверить, что события сделали что-то: rectangleButton.Click.Add (fun (x) -> rectangleButton.Text <- "test"). И они изменили buttontext –