sopi9 Ответов: 1

Отключить кнопку закрытия для динамически создаваемой формы


Я хочу отключить кнопку close () для динамически создаваемой формы.
Я могу сделать это, переопределив
CreateParamsforms
форма метода формы добавляются в проект через обозреватель решений. Но это не работает для форм, созданных динамически с помощью кода позади. то есть я не могу вызвать
CreateParams
из динамической формы.

Что я уже пробовал:

ниже приведено рабочее решение для отключения кнопки закрытия путем переопределения метода CreateParams для добавления формы через обозреватель решений

public partial class Form1 : Form
    {
        #region Private Variables
        private const int CP_NOCLOSE_BUTTON = 0x200;
        #endregion
        public Form1()
        {
            InitializeComponent();
        }
        protected override CreateParams CreateParams
        {
            get
            {
                var myCp = base.CreateParams;
                myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON;
                return myCp;
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            
        }
    }


Но, для приведенной ниже динамической формы, как я могу отключить кнопку закрытия

public static DialogResult CustomDialogBox(string title, string _lblUserName, string _lblPassword, ref string proxyUserName, ref string proxyPassword)
        {
            Form frmProxyAuthDialog = new Form();
            frmProxyAuthDialog.FormClosing += FrmProxyAuthDialog_FormClosing;
            Label lblUserName = new Label();
            Label lblPassword = new Label();
            TextBox txtUserName = new TextBox();
            TextBox txtPassword = new TextBox();
            txtPassword.PasswordChar = '*';
            Button buttonOk = new Button();
            //Button buttonCancel = new Button();

            frmProxyAuthDialog.Text = title;
            lblUserName.Text = _lblUserName;
            lblPassword.Text = _lblPassword;

            buttonOk.Text = "OK";
            //buttonCancel.Text = "Cancel";
            buttonOk.DialogResult = DialogResult.OK;
            //buttonCancel.DialogResult = DialogResult.Cancel;

            lblUserName.SetBounds(9, 10, 372, 13);
            txtUserName.SetBounds(12, 30, 372, 20);

            lblPassword.SetBounds(9, 52, 372, 13);
            txtPassword.SetBounds(12, 68, 372, 20);
            buttonOk.SetBounds(228, 90, 75, 23);
            //buttonCancel.SetBounds(309, 72, 75, 23);

            lblUserName.AutoSize = true;
            lblPassword.AutoSize = true;

            txtUserName.Anchor = txtUserName.Anchor | AnchorStyles.Right;
            txtPassword.Anchor = txtPassword.Anchor | AnchorStyles.Right;

            buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
            //buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;

            frmProxyAuthDialog.ClientSize = new Size(396, 120);
            frmProxyAuthDialog.Controls.AddRange(new Control[] { lblUserName, lblPassword, txtUserName, txtPassword, buttonOk });
            frmProxyAuthDialog.ClientSize = new Size(Math.Max(300, lblUserName.Right + 10), frmProxyAuthDialog.ClientSize.Height);
            frmProxyAuthDialog.FormBorderStyle = FormBorderStyle.FixedDialog;
            frmProxyAuthDialog.StartPosition = FormStartPosition.CenterScreen;
            frmProxyAuthDialog.MinimizeBox = false;
            frmProxyAuthDialog.MaximizeBox = false;
            frmProxyAuthDialog.AcceptButton = buttonOk;
            //frmProxyAuthDialog.CancelButton = buttonCancel;

            DialogResult dialogResult = frmProxyAuthDialog.ShowDialog();
            proxyUserName = txtUserName.Text;
            proxyPassword = txtPassword.Text;
            return dialogResult;
        }


Я также попытался отменить закрытие формы при закрытии формы, если причина закрытия не является закрытием пользователя. Но, если причина закрытия формы всегда заключается в закрытии пользователя, если кнопка закрытия нажата первой.

CHill60

Я в замешательстве - почему вы пометили обоих ASP.NET и WinForms?

Karthik_Mahalingam

:)

1 Ответов

Рейтинг:
0

Richard Deeming

Просто-создайте класс для вашей динамической формы, который переопределяет CreateParams собственность:

public class NoCloseForm : Form
{
    private const int CP_NOCLOSE_BUTTON = 0x200;
    
    protected override CreateParams CreateParams
    {
        get
        {
            var myCp = base.CreateParams;
            myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON;
            return myCp;
        }
    }
}

Затем используйте этот класс для создания динамической формы:
public static DialogResult CustomDialogBox(string title, string _lblUserName, string _lblPassword, ref string proxyUserName, ref string proxyPassword)
{
    Form frmProxyAuthDialog = new NoCloseForm();
    ...