كيفية إظهار نافذة إخفاء في تطبيق نموذج Windows

برمجة


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

شكرًا
برافولا

الحل 2

الإجابة الأولى

لا أعلم إن كنت قد فهمت كلامك بشكل صحيح، لكن إليك بعض الروابط:

http://stackoverflow.com/questions/8210095/c-sharp-show-hidden-window[^]
http://www.techotopia.com/index.php/Hiding_and_Showing_Forms_in_C_Sharp[^]

[^]

الإجابة الثانية

كيفية التقاط ضغطات المفاتيح في النموذج الخاص بك:
http://stackoverflow.com/questions/3001237/how-to-catch-key-press-on-a-form-c-sharp-net[^]
http://www.dreamincode.net/forums/topic/61509-capture-key-pressed/[^]
http://www.daniweb.com/software-development/csharp/threads/29646/capturing-keypresses[^]

[^]

آمل أن يساعدك أي من هذه الطرق الثلاثة …

الحل 3

عزيزي
تصفح هذه الروابط، سوف تحصل على الكود

إخفاء النافذة باستخدام C#[^]

http://www.techotopia.com/index.php/Hiding_and_Showing_Forms_in_C_Sharp[^]

الحل 4

جرب هذا:
يستخدم OnKeydown[^] حدث:

ج #
private void OnKeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
     if (e.Shift && e.KeyCode == Keys.H) 
     {
         WindowState = FormWindowState.Minimized;
     }        
}

وجدته هنا[^]

الحل 5

تحتاج إلى الحصول على ربط في Win32 API. بمجرد إخفاء نموذج ‎.net الخاص بك، تتوقف الأحداث والمشتركون في الأحداث عن العمل لأنها موجودة فقط في حاوية النموذج. تحتاج إلى شيء من هذا القبيل.

ج #
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows.Input;

public class GlobalHotKey : IDisposable
{
  
    public static bool RegisterHotKey(string aKeyGestureString, Action aAction)
    {
        var c = new KeyGestureConverter();
        KeyGesture aKeyGesture = (KeyGesture)c.ConvertFrom(aKeyGestureString);
        return RegisterHotKey(aKeyGesture.Modifiers, aKeyGesture.Key, aAction);
    }

    public static bool RegisterHotKey(ModifierKeys aModifier, Key aKey, Action aAction)
    {
        if (aModifier == ModifierKeys.None)
        {
            throw new ArgumentException("Modifier must not be ModifierKeys.None");
        }
        if (aAction is null)
        {
            throw new ArgumentNullException(nameof(aAction));
        }

        System.Windows.Forms.Keys aVirtualKeyCode = (System.Windows.Forms.Keys)KeyInterop.VirtualKeyFromKey(aKey);
        currentID = currentID + 1;
        bool aRegistered = RegisterHotKey(window.Handle, currentID,
                                    (uint)aModifier | MOD_NOREPEAT,
                                    (uint)aVirtualKeyCode);

        if (aRegistered)
        {
            registeredHotKeys.Add(new HotKeyWithAction(aModifier, aKey, aAction));
        }
        return aRegistered;
    }

    public void Dispose()
    {
        // unregister all the registered hot keys.
        for (int i = currentID; i > 0; i--)
        {
            UnregisterHotKey(window.Handle, i);
        }

        // dispose the inner native window.
        window.Dispose();
    }

    static GlobalHotKey()
    {
        window.KeyPressed += (s, e) =>
        {
            registeredHotKeys.ForEach(x =>
            {
                if (e.Modifier == x.Modifier && e.Key == x.Key)
                {
                    x.Action();
                }
            });
        };
    }

    private static readonly InvisibleWindowForMessages window = new InvisibleWindowForMessages();
    private static int currentID;
    private static uint MOD_NOREPEAT = 0x4000;
    private static List<HotKeyWithAction> registeredHotKeys = new List<HotKeyWithAction>();

    private class HotKeyWithAction
    {

        public HotKeyWithAction(ModifierKeys modifier, Key key, Action action)
        {
            Modifier = modifier;
            Key = key;
            Action = action;
        }

        public ModifierKeys Modifier { get; }
        public Key Key { get; }
        public Action Action { get; }
    }

    // Registers a hot key with Windows.
    [DllImport("user32.dll")]
    private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
    // Unregisters the hot key with Windows.
    [DllImport("user32.dll")]
    private static extern bool UnregisterHotKey(IntPtr hWnd, int id);

    private class InvisibleWindowForMessages : System.Windows.Forms.NativeWindow, IDisposable
    {
        public InvisibleWindowForMessages()
        {
            CreateHandle(new System.Windows.Forms.CreateParams());
        }

        private static int WM_HOTKEY = 0x0312;
        protected override void WndProc(ref System.Windows.Forms.Message m)
        {
            base.WndProc(ref m);

            if (m.Msg == WM_HOTKEY)
            {
                var aWPFKey = KeyInterop.KeyFromVirtualKey(((int)m.LParam >> 16) & 0xFFFF);
                ModifierKeys modifier = (ModifierKeys)((int)m.LParam & 0xFFFF);
                if (KeyPressed != null)
                {
                    KeyPressed(this, new HotKeyPressedEventArgs(modifier, aWPFKey));
                }
            }
        }

        public class HotKeyPressedEventArgs : EventArgs
        {
            private ModifierKeys _modifier;
            private Key _key;

            internal HotKeyPressedEventArgs(ModifierKeys modifier, Key key)
            {
                _modifier = modifier;
                _key = key;
            }

            public ModifierKeys Modifier
            {
                get { return _modifier; }
            }

            public Key Key
            {
                get { return _key; }
            }
        }


        public event EventHandler<HotKeyPressedEventArgs> KeyPressed;

        #region IDisposable Members

        public void Dispose()
        {
            this.DestroyHandle();
        }

        #endregion
    }
}

الآن قم بتسجيل S وH باستخدام Alt + Shift عن طريق الاتصال وتمرير مكالمة من النوع Action.

RegisterHoitKey.

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

الحل 6

لإظهار نافذة وإخفائها في تطبيق Windows Forms باستخدام مفتاح الاختصار، يمكنك التعامل مع حدث KeyDown لاكتشاف وقت الضغط على مفتاح الاختصار. وبعد ذلك، يمكنك تبديل رؤية النموذج وفقًا لذلك. فيما يلي مثال أساسي لكيفية تحقيق ذلك:

ج #
using System;
using System.Windows.Forms;

namespace YourNamespace
{
    public partial class MainForm : Form
    {
        private bool isVisible = true; // Flag to track the visibility of the form

        public MainForm()
        {
            InitializeComponent();
            this.KeyPreview = true; // Enable key events to be captured by the form
            this.KeyDown += MainForm_KeyDown; // Subscribe to the KeyDown event
        }

        private void MainForm_KeyDown(object sender, KeyEventArgs e)
        {
            // Check if the shortcut key (e.g., Ctrl + H) is pressed
            if (e.Control && e.KeyCode == Keys.H)
            {
                // Toggle the visibility of the form
                isVisible = !isVisible;
                
                if (isVisible)
                {
                    // Show the form
                    this.Show();
                }
                else
                {
                    // Hide the form
                    this.Hide();
                }
            }
        }
    }
}

في هذا المثال:

لقد اشتركنا في حدث KeyDown للنموذج في المُنشئ.
عند الضغط على مفتاح الاختصار (في هذه الحالة، Ctrl + H)، يتم استدعاء معالج الأحداث MainForm_KeyDown.
داخل معالج الأحداث، نقوم بتبديل رؤية النموذج باستخدام العلامة isVisible وطرق Show() وHide().
تأكد من استبدال YourNamespace بمساحة الاسم الفعلية لتطبيقك. يمكنك أيضًا تخصيص مجموعة مفاتيح الاختصار (Ctrl + H في هذا المثال) عن طريق تعديل الشرط في معالج الأحداث KeyDown.

コメント

タイトルとURLをコピーしました