نمایش نتایج 1 تا 8 از 8

نام تاپیک: ایجاد کلید shortcut برای کنترلرهای برنامه

  1. #1
    کاربر تازه وارد آواتار farhad nadimi
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    نرم افزار
    پست
    86

    Lightbulb ایجاد کلید shortcut برای کنترلرهای برنامه

    با سلام

    من برنامه ای نوشتم که در این برنامه می خوام کلید میانبری برای راحتی کاربر قرار بدم که با زدن

    اون بجای اینکه با موس بره روش و کلیک کنه همانند دیگر برنامه ها با زدن کلید میانبر اقدام به

    انجام اون کار بکنه که سرعت عمل کاربر در برنامه رو بالا می بره و هم باعث محبوبیت برنامه نزد

    کاربر میشه این برنامه در #C نوشته شده اگر امکان داره با سورساتون کمکم کنین ممنون

    می شم چون در اینترت گشتم و چیزی به چشم نخورده و یا قانعم نکرده.

  2. #2
    کاربر دائمی آواتار AmirAmiri
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    مشهد
    پست
    353

    نقل قول: ایجاد کلید shortcut برای کنترلرهای برنامه

    سلام دوست عزیز.
    برای اینکار ابتدا باید خاصیت KeyPreview فرم رو true کنی و بعد کد زیر رو توی رویداد KeyUp فرم بنویس :
    private void ShortcutKeys(object sender, KeyEventArgs e)
    {
    switch (e.KeyCode)
    {
    case Keys.F5:
    { /* Clear Text Boxs */; break; }
    case Keys.F2:
    { /* Edit void name */; break; }
    case Keys.Escape:
    { this.Close(); break; }
    }
    }

    هر کلید دیگه ای که خواستی میتونی بعریف کنی و زمانی که توی فرم هر کدوم از این کلید ها رو فشار بدی، این رویداد اجرا میشه و کده مربوط به کلید مورد نظر رو اجرا میکنه.
    خیلی سادست امیدوارم به دردت بخوره.
    موفق و پیروز باشی.

  3. #3

    نقل قول: ایجاد کلید shortcut برای کنترلرهای برنامه

    سلام

    در تکمیل حرف دوستمون :

    1- اگر می خواید برای یک دکمه یا منو یا هرچیز دیگه ای shortcut بگذارید و این shortcut یکی از حروف text آن باشد. است کافی است قبیل از اون حرف علامت & قرار بدید
    مثلا اگر یک دکمه دارید که text اون هست "Cancel" و می خواهید با زدن دکمه "n" از روی کی بورد این دکمه صدا زده شود، text آن را بصورت "Ca&ncel" بنویسید.

    2- اگر می خواهید از کلید های ترکیبی استفاده کنید، مثلا Alt+T یا هر چیز دیگه ای می توانید متد ProcessDialogKey فرم را override کنید.

    به کد زیر توجه کنید :

    protected override bool ProcessDialogKey(Keys keyData)
    {
    if (keyData == (Keys.Control | Keys.A))
    {
    //Do Something
    }
    return base.ProcessDialogKey(keyData);
    }
    با این کد، با زدن دکمه Ctrl+A ، کار مورد نظر انجام می شود


    موفق باشید

  4. #4
    کاربر تازه وارد آواتار farhad nadimi
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    نرم افزار
    پست
    86

    Thumbs up نقل قول: ایجاد کلید shortcut برای کنترلرهای برنامه

    با سلامی مجدد خدمت شما دوست عزیز ممنون راهنمایی شما بسیار سازنده بود ولی مشکلی

    که برام پیش اومده و سعی در اصلاح اون دارم تلاش می کنم ولی گفتم بپرسم که مثلا می خوای

    کد مربوط به فلان دکمه رو از فرم با زدن کلید shortcut اجرا کنی اون موقع چطوری دستور اون

    کنترل مثلا button رو فراخوانی می کنی آیا با فراخوانی های عادی که انجام می دیم برای هر روال

    از توابع یا چطوری ممنون از راهنماییت

  5. #5
    کاربر دائمی آواتار AmirAmiri
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    مشهد
    پست
    353

    نقل قول: ایجاد کلید shortcut برای کنترلرهای برنامه

    فکر کنم همون مثالی که زدم گویای همه چیز بود اما بازم با یک مثاله دیگه کامل ترش میکنم.
    private void ShortcutKeys(object sender, KeyEventArgs e)
    {
    switch (e.KeyCode)
    {
    case Keys.F5:
    { btnNew_Click(new object(),new EventArgs()) ; break; }
    case Keys.F2:
    { btnAdd_Click(new object(),new EventArgs()); break; }
    case Keys.Escape:
    { this.Close(); break; }
    }
    }

  6. #6

    نقل قول: ایجاد کلید shortcut برای کنترلرهای برنامه

    سلام
    شما نیاز به کلاس زیر دارید
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    using System.Windows.Forms;
    using System.Runtime.InteropServices;

    namespace DCC_Utility
    {
    class Hotkeys
    {
    //http://www.dreamincode.net/forums/topic/180436-global-hotkeys/
    [DllImport("user32.dll")]
    private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);

    [DllImport("user32.dll")]
    private static extern bool UnregisterHotKey(IntPtr hWnd, int id);

    private int modifier;
    private int key;
    private IntPtr hWnd;
    private int id;

    public static class Constants
    {
    //modifiers
    public const int NOMOD = 0x0000;
    public const int ALT = 0x0001;
    public const int CTRL = 0x0002;
    public const int SHIFT = 0x0004;
    public const int WIN = 0x0008;

    //windows message id for hotkey
    public const int WM_HOTKEY_MSG_ID = 0x0312;
    }

    public Hotkeys(int modifier, Keys key, Form form)
    {
    this.modifier = modifier;
    this.key = (int)key;
    this.hWnd = form.Handle;
    id = this.GetHashCode();
    }
    public override int GetHashCode()
    {
    return modifier ^ key ^ hWnd.ToInt32();
    }
    public bool Register()
    {
    return RegisterHotKey(hWnd, id, modifier, key);
    }

    public bool Unregiser()
    {
    return UnregisterHotKey(hWnd, id);
    }

    }
    }


    به تعداد Hotkey های مورد نیاز متغیر در اول فرم خود تعریف کنید
    Hotkeys ghk;
    Hotkeys ghk1;
    Hotkeys ghk2;
    Hotkeys ghk3;


    در constructor فرم مقادیر HotKey را تعریف نمایید
    InitializeComponent();

    ghk = new Hotkeys(Hotkeys.Constants.CTRL, Keys.OemSemicolon, this);
    ghk1 = new Hotkeys(Hotkeys.Constants.CTRL, Keys.I, this);
    ghk2 = new Hotkeys(Hotkeys.Constants.CTRL, Keys.O, this);
    ghk3 = new Hotkeys(Hotkeys.Constants.CTRL, Keys.B, this);

    این چهار روتین را به فرم خود اضافه نمایید
    private Keys GetKey(IntPtr LParam)
    {
    return (Keys)((LParam.ToInt32()) >> 16); // not all of the parenthesis are needed, I just found it easier to see what's happening
    }

    protected override void WndProc(ref Message m)
    {
    if (m.Msg == Hotkeys.Constants.WM_HOTKEY_MSG_ID)
    switch (GetKey(m.LParam))
    {
    //case Keys.OemSemicolon:
    // HandleHotkey();
    // break;
    case Keys.I:
    toolStripButton2_Click(null, null);
    break;
    case Keys.O:
    toolStripButton3_Click(null, null);
    break;
    case Keys.B:
    toolStripButton4_Click(null, null);
    break;
    case Keys.E:
    toolStripButton5_Click(null, null);
    break;
    case Keys.D:
    toolStripButton6_Click(null, null);
    break;
    case Keys.Q:
    toolStripButton1_Click_1(null, null);
    break;
    case Keys.T:
    tsUtility_Click(null, null);
    break;
    case Keys.K:
    tsKawasaki_Click(null, null);
    break;


    }
    base.WndProc(ref m);
    }

    private void RegHotKeys()
    {
    ghk.Register();
    ghk1.Register();
    ghk2.Register();
    ghk3.Register();
    ghk4.Register();
    ghk5.Register();
    ghk6.Register();
    ghk7.Register();
    ghk8.Register();
    }

    private void UnRegHotKeys()
    {
    ghk.Unregiser();
    ghk1.Unregiser();
    ghk2.Unregiser();
    ghk3.Unregiser();
    ghk4.Unregiser();
    ghk5.Unregiser();
    ghk6.Unregiser();
    ghk7.Unregiser();
    ghk8.Unregiser();
    }


    در ابتدای کلاس ریفرنس خودم را نوشته ام. باز هم اگر مشکل داشتید بفرمایید
    موفق باشید

  7. #7
    کاربر دائمی آواتار morteza271
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    مشهد
    پست
    1,723

    نقل قول: ایجاد کلید shortcut برای کنترلرهای برنامه

    از DevComponent میتونی استفاده کنی...
    توی این کامبوننت برای هر کلید یا چیز دیگه ای میتونی کلید میانبر تعریف کنی و دقیقا همون چیزی هست که شما میخواین.
    آدرس دانلودشو ندارم وگرنه برات میذاشتم،شرمنده.
    موفق باشید.

  8. #8

    نقل قول: ایجاد کلید shortcut برای کنترلرهای برنامه

    سلام مجدد

    برای اینکه کد داخل رویداد کلیک یک دکمه را فراخوانی کنی از متد PerformClick استفاده کن.

    button1.PerformClick();


    به همین سادگی!


    موفق باشید

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •