Народ (
http://www.rsdn.ru/forum/nemerle/4067914.1.aspxАвтор: hardcase
Дата: 07.12.10
) хотел инициализаторы коллекций, так что я решил поделиться, и обновил реализацию with-макроса в сниппетах. Поддерживаются новые фичи.
1. Инициализация списков
def l = List() with [ 2, 3, 4 ];
def l2 = StringCollection() with [ "a", "b", "c" ]; // поддержка любых объектов с методом Add
2. Инициализация коллекций
def coll = Dictionary() with [ "name" = "Jason", "surname" = "Vorhees" ];
3. Вложенная инициализация без создания объектов
def k = Diagnostics.Process() with
{
EnableRaisingEvents = false;
StartInfo with // никаких присваиваний!
{
FileName = <# calc.exe #>;
UseShellExecute = true;
}
}
4. Поддержка событий
def btn = Button() with
{
MouseMove += handler;
Click => form.Text = "Click!"; // упрощенная форма, как в компиляторе Mono C#
},
5. Поддержка метода AddRange
def controls = array[myButton, myListBox];
def panel = Panel() with { Controls ::= controls };
Наконец-то можно создавать формы одним выражением:
| Скрытый текст |
| def f = Form() with
{
Font = Drawing.Font("Segoe UI", 9);
Text = "hello";
Width += 100;
Height -= 100;
Controls with
[
Panel() with
{
Controls with
[
ListBox() with
{
IntegralHeight = false;
Dock = DockStyle.Fill;
Name = "second";
},
ListBox() with
{
Dock = DockStyle.Left;
Name = "first";
Items with [3, 4, 5];
Items ::= otherItems;
IntegralHeight = false;
SelectedIndexChanged +=
(s, _) =>
{
def first = (s :> ListBox);
def second = first.Parent.Controls["second"] :> ListBox;
second.DataSource = first.SelectedItem.ToString().ToArray();
}
}
];
Dock = DockStyle.Fill;
},
Button() with
{
Text = "push me";
Dock = DockStyle.Top;
Click => _ = k.Start();
},
TextBox() with
{
Text = "type in me";
Dock = DockStyle.Bottom;
}
];
}
|
| |