PDA

View Full Version : انتقال بین اجزای یک فرم



AmirAlimadadi
چهارشنبه 29 خرداد 1387, 11:26 صبح
سلام دوستان
من می خوام یه برنامه رو طوری طراحی کنم که اگه کاربر کلید Enter رو فشار داد به ترتیب tabindex ها، اجزای مختلف یه فرم انتخاب بشن، در ضمن می خوام که این کد یه جا فقط نوشته بشه، یعنی نمی خوام که توی keypress event تمامی component ها کدنویسی کنم. با تشکر

علیرضا مداح
چهارشنبه 29 خرداد 1387, 11:38 صبح
سلام دوست عزیز ،
شما باید یک فرم به طور مثال به نام MyForm ایجاد کرده و متد ProcessCmdKey مربوط به آن را Override نموده و فرم های دیگر برنامه را از این فرم Inherit کنید :


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication91
{
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
bool result = false;
if (keyData == Keys.Enter)
{
ProcessTabKey(true);
result = false;
}
else
result = base.ProcessCmdKey(ref msg, keyData);
return result;
}
}
}

AmirAlimadadi
چهارشنبه 29 خرداد 1387, 11:53 صبح
سلام دوست عزیز ،
شما باید یک فرم به طور مثال به نام MyForm ایجاد کرده و متد ProcessCmdKey مربوط به آن را Override نموده و فرم های دیگر برنامه را از این فرم Inherit کنید :


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication91
{
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
bool result = false;
if (keyData == Keys.Enter)
{
ProcessTabKey(true);
result = false;
}
else
result = base.ProcessCmdKey(ref msg, keyData);
return result;
}
}
}


ممنون از راهنمایی موثرتون، ولی یه مشکلی که هست اینه که توی این حالت با هر انتقال بین textbox ها بوق کامپیوتر یه بار به صدا در میاد، چه طور می شه بوق رو از کار انداخت

mehrnoosh_al62
چهارشنبه 29 خرداد 1387, 13:26 عصر
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (msg.Msg == 0x0100)
{
switch (keyData)
{

case Keys.Enter:
{
this.SelectNextControl(this.ActiveControl, true, true, true, false);
if (this.ActiveControl is TextBox)
((TextBox)this.ActiveControl).SelectAll();
return true;
}
}
}
return base.ProcessCmdKey(ref msg, keyData);
}

البته این برای texbox های درون فرمه میتونید تغییرش بدید

اَرژنگ
چهارشنبه 29 خرداد 1387, 14:56 عصر
سلام دوستان
من می خوام یه برنامه رو طوری طراحی کنم که اگه کاربر کلید Enter رو فشار داد به ترتیب tabindex ها، اجزای مختلف یه فرم انتخاب بشن، در ضمن می خوام که این کد یه جا فقط نوشته بشه، یعنی نمی خوام که توی keypress event تمامی component ها کدنویسی کنم. با تشکر
عوض کردن روشی که که کاربر عادت دارد با سیستم کار کند کار دلبخواهی برنامه نویسی نیست،اینکه کلید Enter با Tab روش کارشان فرق میکند دلیل دارد، ههمینطوری نباید عوضشان کرد.