PDA

View Full Version : جايگزيني كليد اينتر به جاي تب در ديتا گريد ويد



dab_hrd
پنج شنبه 29 دی 1390, 08:18 صبح
من در حال طراحي فاكتور هستم و مي خواهم با زدن كليد اينتر به سلول بعدي بروم و بتوانك كليد اينتر را كنترل كنم لطفا" من را راهنمايي كنيد
با سپاس

elena2007
پنج شنبه 29 دی 1390, 09:51 صبح
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
const int WM_KEYDOWN = 0x100;
const int WM_SYSKEYDOWN = 0x104;
if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
{
switch (keyData)
{
case Keys.Enter:
try
{
grid1.CurrentCell = grid1[grid1.CurrentCell.ColumnIndex + 1, grid1.CurrentCell.RowIndex];
}
catch { }
return true;
case Keys.Right:
try
{
grid1.CurrentCell = grid1[grid1.CurrentCell.ColumnIndex - 1, grid1.CurrentCell.RowIndex];
}
catch { }
return true;
case Keys.Left:
try
{
grid1.CurrentCell = grid1[grid1.CurrentCell.ColumnIndex + 1, grid1.CurrentCell.RowIndex];
}
catch { }
return true;
case Keys.Up:
try
{
grid1.CurrentCell = grid1[grid1.CurrentCell.ColumnIndex, grid1.CurrentCell.RowIndex - 1];
}
catch { }
return true;
case Keys.Down:
try
{
grid1.CurrentCell = grid1[grid1.CurrentCell.ColumnIndex, grid1.CurrentCell.RowIndex + 1];
}
catch { }
return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}

این تابع رو بنویسین . اسم گرید رو هم عوض کنین که خطا نگیره .

dab_hrd
پنج شنبه 29 دی 1390, 10:39 صبح
با سلام
ضمن تشكر از شما دوست عزيز من يك مشكلات ديگري نيز دارم لطفا" مرا راهنمايي كنيد
1- مي خواهم در سلول آخر با زدن كليد اينتر به سلول اول سطر بعدي بروم كه با تنظيماتي كه خودم انجام دادم به سلول دومي مي رود
2- چگونه مي توان تعريف كنم كه فرضا" اگر در سلول 2 كد كالا را وارد كردم و اينتر زدم و مشخصات آن را از بانك خوانده و در سلول فرضا" سوم نمايش داده و سلول چهارم فعال شود .
3 چون من فرمهاي زيادي دارم چگونه مي توان اين فرم را تنها يكبار بنويسم .
با تشكر

dab_hrd
پنج شنبه 29 دی 1390, 11:44 صبح
لطفا" يكي جواب بده

Mahmoud Zaad
پنج شنبه 29 دی 1390, 11:59 صبح
سلام
جواب سوال دوم: کدهای مورد نظر رو توی رویداد cellendedit بنویسد
جواب سوال سوم: یه کلاس به پروژه اضافه کنید همه کدها به جز فضای نام ها و کد زیر رو ، حذف کنید و کدهایی که زیر رو به جاش بنویسید
namespace myProjectName
{
کدهایی که اینجا هست رو اول حذف کنید بعد کدهای زیر رو بنویسید


publicclassDataGridViewEx : DataGridView
{
public DataGridViewEx()
: base()
{
//set the edit mode to "on enter" so that when a cell gains focus
//it automatically enters editing mode
this.EditMode = DataGridViewEditMode.EditOnEnter;
}
protectedoverridebool ProcessDialogKey(Keys keyData)
{
//if the key pressed is "return" then tell the datagridview to move to the next cell
if (keyData == Keys.Enter)
{
MoveToNextCell();
returntrue;
}
else
returnbase.ProcessDialogKey(keyData);
}
///<summary>
/// this function moves the focus to the next cell
///</summary>
publicvoid MoveToNextCell()
{
int CurrentColumn, CurrentRow;
//get the current indicies of the cell
CurrentColumn = this.CurrentCell.ColumnIndex;
CurrentRow = this.CurrentCell.RowIndex;
//if cell is at the end move it to the first cell of the next row
//other with move it to the next cell
if (CurrentColumn == this.Columns.Count - 1 && CurrentRow != this.Rows.Count - 1)
{
base.ProcessDataGridViewKey(newKeyEventArgs(Keys.H ome));
base.ProcessDataGridViewKey(newKeyEventArgs(Keys.D own));
}
else
base.ProcessDataGridViewKey(newKeyEventArgs(Keys.R ight));
}
}
}
حالا اگه پروژه رو build کنید می بینید که آیکن کلاس عوض شد و کنترل مربوطه توی تولباکس اضافه شد حالا مثل یه دیتاگریدویو باهاش رفتار کنید

dab_hrd
پنج شنبه 29 دی 1390, 12:45 عصر
با سلام
ضمن تشكر از شما دوستان عزيز من هنوز داري 1 مشكل ذيل مي باشم .
1- مي خواهم در سلول آخر با زدن كليد اينتر به سلول اول سطر بعدي بروم كه با تنظيماتي كه خودم انجام دادم به سلول ستون دومي سطر بعدي مي رود
با تشكر

dab_hrd
دوشنبه 03 بهمن 1390, 11:18 صبح
لطفا" يك نفر كمك كند !

dab_hrd
چهارشنبه 05 بهمن 1390, 10:25 صبح
لطفا" يك نفر كمك كند !

ali_habibi1384
چهارشنبه 05 بهمن 1390, 10:38 صبح
با سلام
ضمن تشكر از شما دوستان عزيز من هنوز داري 1 مشكل ذيل مي باشم .
1- مي خواهم در سلول آخر با زدن كليد اينتر به سلول اول سطر بعدي بروم كه با تنظيماتي كه خودم انجام دادم به سلول ستون دومي سطر بعدي مي رود
با تشكر
خب حتما يه جاي كار اشتباه كرديد.ميشه حدس زد .من تاپيكتونو و كدها رو از اول خوندم. وقتي توي رويداد keydown بهش ميگيد بره سطر پايين و سلول اول رويداد CellEnter انجام ميشه كه توي اون نوشتيد بره سلول بعدي يا خود End Edit رو فراخواني كرديد. كه توي اون يه كد مشابه نوشتيد.
حالا شما كد رو ضميمه كنيد تا ببينيم مشكل كجاست.

modern_amin
چهارشنبه 05 بهمن 1390, 11:34 صبح
انصافا همه چی اینجا هست
http://barnamenevis.org/showthread.php?245726-مطالبی-کمیاب-در-مورد-Data-Grid-View&highlight=%