1

複数のボックスを開くとアプリケーションがクラッシュするため、ボタンをクリックできる回数に制限があるようにしたいと思います ~:(

これは、多くのボックスが開かないようにしたいフォームのコードです。誤解しないでください。複数のボックスが必要ですが、多くはありません。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
            this.KeyPreview = true;
            this.KeyDown += new KeyEventHandler(Form1_KeyDown);

        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            var myForm = new Form2();
            myForm.Show();

        }
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Alt && e.KeyCode == Keys.A)
            {
                Form3 f3 = new Form3();
                f3.ShowDialog();
            }

        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }
    }
}
4

3 に答える 3

3

専用カウンターをご利用ください。ユーザーがボタンをクリックするたびにカウンターをインクリメントし、新しいフォームを表示する前にカウンターをチェックします。

private int clickCounter = 0;

private void pictureBox1_Click(object sender, EventArgs e)
{
    this.clickCounter++;
    if (this.clickCounter < 10) // arbitrary number
    {
        var myForm = new Form2();
        myForm.Show();
    }
}

これは、ユーザーがフォームの単一インスタンスのボタンを乱用しないようにするために機能します。フォームのすべてのインスタンスに同じカウンターが適用されるようにするには、静的にします。

private static int clickCounter = 0;

private void pictureBox1_Click(object sender, EventArgs e)
{
    clickCounter++;
    if (clickCounter < 10) // arbitrary number
    {
        var myForm = new Form2();
        myForm.Show();
    }
}

ジュニアプログラマーが提案するように、フォームが閉じられたときにカウンターを減らしたい場合は、イベントにバインドできますClosing。これにより、開くことができる新しいフォームの数が効果的に制限されます (ボタンをクリックできる回数を制限するだけではありません)。これは、ローカル カウンター バージョンと静的カウンター バージョンの両方で機能します。

myForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
     clickCounter--;
}

private void pictureBox1_Click(object sender, EventArgs e)
{
    if (clickCounter < 10) // arbitrary number
    {
        clickCounter++;
        var myForm = new Form2();
        myForm.Closing += myForm_Closing;
        myForm.Show();
    }
}
于 2013-06-17T19:10:30.043 に答える