سؤال

في طلبي أحتاج مؤقتا الرمادي زر تقليل من النموذج الرئيسي.أي أفكار كيف يمكن تحقيق ذلك ؟ أنا لا تمانع في القيام p/استدعاء Win32 dll.

تحرير:الشيب من زر تقليل سيكون الحل المفضل ، ولكن هل هناك أي طريقة أخرى لمنع شكل من أصبحت والحد منها ؟

هل كانت مفيدة؟

المحلول

وقرأت تعليقك في ما يخص ردي وكان قادرا على حشد حل أكثر اكتمالا بالنسبة لك. ركضت هذا بسرعة، ويبدو أن السلوك الذي أردت. بدلا من اشتقاق WinForms عناصر الخاص بك من نموذج، تنبع من هذه الفئة:


using System;
using System.Windows.Forms;
using System.ComponentModel;

namespace NoMinimizeTest
{
    public class MinimizeControlForm : Form
    {
        private const int WM_SYSCOMMAND = 0x0112;
        private const int SC_MINIMIZE = 0xf020;

        protected MinimizeControlForm()
        {
            AllowMinimize = true;
        }

        protected override void WndProc(ref Message m)
        {
            if (!AllowMinimize)
            {
                if (m.Msg == WM_SYSCOMMAND)
                {
                    if (m.WParam.ToInt32() == SC_MINIMIZE)
                    {
                        m.Result = IntPtr.Zero;
                        return;
                    }
                }
            }
            base.WndProc(ref m);
        }

        [Browsable(true)]
        [Category("Behavior")]
        [Description("Specifies whether to allow the window to minimize when the minimize button and command are enabled.")]
        [DefaultValue(true)]
        public bool AllowMinimize
        {
            get;
            set;
        }
    }
}

هل يمكن أن تفعل أكثر قليلا إذا كنت تريد أن تكون قادرة على أن تقرر ما اذا كانت ستسمح التقليل في الوقت الذي أرسلت النقر على سبيل المثال:


using System;
using System.Windows.Forms;
using System.ComponentModel;

namespace NoMinimizeTest
{
    public class MinimizeControlForm : Form
    {
        private const int WM_SYSCOMMAND = 0x0112;
        private const int SC_MINIMIZE = 0xf020;

        protected MinimizeControlForm()
        {

        }

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_SYSCOMMAND)
            {
                if (m.WParam.ToInt32() == SC_MINIMIZE && !CheckMinimizingAllowed())
                {
                    m.Result = IntPtr.Zero;
                    return;
                }
            }
            base.WndProc(ref m);
        }

        private bool CheckMinimizingAllowed()
        {
            CancelEventArgs args = new CancelEventArgs(false);
            OnMinimizing(args);
            return !args.Cancel;
        }

        [Browsable(true)]
        [Category("Behavior")]
        [Description("Allows a listener to prevent a window from being minimized.")]
        public event CancelEventHandler Minimizing;

        protected virtual void OnMinimizing(CancelEventArgs e)
        {
            if (Minimizing != null)
                Minimizing(this, e);
        }
    }
}

لمزيد من المعلومات حول هذا الإعلام النافذة، نرى في المادة MSDN عن ذلك .

نصائح أخرى

form.MinimizeBox = false;

وأو إذا كان في نطاق النموذج

MinimizeBox = false;

وفقط تفعل MinimizeBox = كاذبة؛ في التعليمات البرمجية النموذج الخاص بك.

ضع هذا الكود في النموذج الخاص بك حجم الحدث:

if (this.WindowState == FormWindowState.Minimized)
{
    this.WindowState = FormWindowState.Normal;
}

وهذا سيجعل الخاص بك نموذج الأمم المتحدة-minimizable (تنويه:أنا لا ندعو إلى تغيير السلوك القياسي من ويندوز في هذا الطريق).

ويمكنك أيضا تنفيذ مؤشر إلى تصغير الحدث لإلغاء الأمر

ولا. لا تعبث مع نافذتي. وهي الألغام، وليس لك. ومن جهاز الكمبيوتر الخاص بي، وإذا كنت ترغب في تقليل، يجب أن تكون قادرة على. لا أستطيع أن أفكر، ونحن لم تكن معينة، لسبب وجيه للقيام بذلك.

والجواب Coincoin هو الصحيح. MinimizeBox يتوفر أيضا كخاصية في إطار خصائص مصمم.

وKevin: بينما أنا أقدر المشاعر، وهذا ليس دائما إجابة صحيحة. إذا يعرض التطبيق مربع حوار مشروط عن طريق إنشاء مثيل جديد من نموذج ثم استدعاء .ShowDialog () على ذلك، كنت لا تريد المستخدم للحد من هذا النموذج، لأنه بعد ذلك يتم حظر جميع مدخلات بشأن موضوع UI الرئيسي حتى وضع مشروط نموذج غير راض. المستخدم يحتمل انقر على النموذج الرئيسي ومجرد الحصول على "دينغ دينغ دينغ" سليمة لا يستجيب من ويندوز ولا يعرفون ما يجب القيام به.

ومجرد تعيين الخاصية MinimizeBox النموذج الخاص بك إلى false. هذا سيتم تعطيل زر تصغير ولكن ستبقى الأزرار الأخرى وظيفية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top