ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

テキストエディタで作るWindows Forms

プログラミングC#では、Visual Studioを使ってやることになっているのですが、エディタで作ってみたかったので、とりあえずVisual C# 2008 Expressでソースを吐かせて、そいつを改造するっていうスタイルで作ってみました。
ちなみに、partialキーワードを使って、画面のデザイン部分と、イベントハンドラその他もろもろ部分とを分けているようです。Generation Gapパターンみたいですね。
ところでソース。

using System;
using System.Windows.Forms;

public class Form1 : Form
{
        public Form1()
        {
                Button btn = new Button();
                btn.Text = "Button";
                btn.Click += this.button1_Click;

                this.Controls.Add(btn);
        }

        private void button1_Click(object sender, EventArgs e)
        {
                MessageBox.Show("Hello, World!");
        }

        static void Main(string[] args)
        {
                //Application.EnableVisualStyles();
                //Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
        }
}

Mainの一行目と二行目は、必要そうな感じだったんですが、コメントアウトしても普通に動きました。デフォルトが効いているのかな?詳しくは分かりません。。
こんなんでもちゃんとウインドウが表示されて、ボタンを押すとポップアップが出ます。


ついでに、久々にSwingとか書いてみる。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class WForm extends JFrame
{
        public WForm()
        {
                JButton btn = new JButton("button");
                btn.addActionListener(
                        new ActionListener() {
                                public void actionPerformed(ActionEvent e)
                                {
                                        JOptionPane.showMessageDialog((Component
)e.getSource(), "Hello, World!");
                                }
                        }
                );
                add(btn);

                // ×ボタンを押した時にプログラムが終了するようにするオマジナイ
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setSize(250, 250);
        }

        public static void main(String[] args)
        {
                WForm form = new WForm();
                form.setVisible(true);
        }
}

Swingなのに、awtのパッケージもimportしなきゃならんのは見苦しいなあ。
いや、しかし懐かしい。
C#の方がデリゲートでイベント処理記述できる分、すっきりしてますね。