2008年1月26日土曜日

VC++2005 フォームをシングルトンのモードレスにする方法

VC++2005 フォームをシングルトンのモードレスにする方法

フォームのインスタンスを静的フィールドに保持しておき、nullのときは新しいインスタンスを作成するようにします。ボタンを押すと、Form2 のインスタンスに対して Show() します
詳細は以下に示します。

//-----------------------------------------------
// 親ウィンドウ Form1.h ボタンを押したとき
// button1 を押すと Form2 を表示します
//-----------------------------------------------
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Form2::Instance()->Show();
}
//-----------------------------------------------
// 子ウィンドウ Form2.h のコンストラクタ部
//-----------------------------------------------
public ref class Form2 : public System::Windows::Forms::Form
{
public:
//*********** 追加 ↓ ***********
static Form2^ Instance()// インスタンスの生成を行う静的メンバ関数
{
if(_instance == nullptr){
_instance = gcnew Form2;
}
return _instance;
}
//*********** 追加 ↑ ***********
public:
Form2(void)
{
InitializeComponent();
//
//TODO: ここにコンストラクタ コードを追加します
//
}
//-----------------------------------------------
// 子ウィンドウ Form2.h のメンバ変数宣言部(静的)
// 必要なデザイナへインスタンス変数を追加します
//-----------------------------------------------
private:
static Form2^ _instance; // インスタンス変数
//-----------------------------------------------
// 子ウィンドウ Form2.h の×を押したとき
// Form2 のインスタンス変数も初期化します
//-----------------------------------------------
private: System::Void Form2_FormClosed(System::Object^ sender, System::Windows::Forms::FormClosedEventArgs^ e) {
_instance = nullptr;
}
//-----------------------------------------------

2008年1月23日水曜日

VC++2005 ボタンをオルタネート動作にする方法

VC++2005 ボタンをオルタネート動作にする方法

ボタンをオルタネート動作にするには、チェックボックスを使用すると簡単に行えます。

■プロパティを変更します。
Appearance = "Button"

■ボタンを押したときボタンの色を変更します。
private: System::Void checkBox1_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {
if( checkBox1->Checked == true )
{
checkBox1->BackColor::set(Color::Green);
}
else
{
checkBox1->BackColor::set(Color::WhiteSmoke);
}