PDA

View Full Version : دو مشکل در دیتا گرید



pooria_googooli
دوشنبه 21 شهریور 1390, 23:29 عصر
سلام دوستان . من با استفاده از کد زیر دکمه اینتر را تبدیل به تب میکنم . اما باز هم وقتی دستگاه بارکد خوان را وصل میکنم و یک بارکد خوانده میشود به محض وارد شدن اطلاعات بارکد خوان در گرید به سطر بعدی میرود در حالی که من کد زیر را نوشتم که اینتر از کار بیفته . چاره چیه ؟ (این رو مطمئنم که بعد از اینکه دستگاه بارکد را میخونه اینتر میکنه چون اگه پیش فرض روی یک دکمه باشم و بارکد خوان هم بارکد بخونه اون دکمه فشرده میشه )
private void gridEX1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.Handled = true;
SendKeys.Send("{tab}");
}
}
مورد بعدی اینه که در گرید ویو وقتی تب رو میزنی و میره روی فیلد بعدی کل اون فیلد رو هایلایت میکنه . من میخوام وقتی رفت روی فیلد بعدی اتوماتیک فقط نوشته های اون فیلد هایلات بشه تا بشه در ادامش چیزی نوشت . اینجوری اگه کاربر چیزی تایپ کنه جای نوشته قبلی را میگیره . ممنون میشم اگه جوابم را بدید :لبخندساده:

seven7777777
سه شنبه 22 شهریور 1390, 00:32 صبح
از کد زیر استفاده کنید :

protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg,
System.Windows.Forms.Keys keyData)
{
if (msg.WParam.ToInt32() == (int)Keys.Enter)
{
string fileCode = FilesGrid.SelectedRows[0].Cells["CodefileCol"].Value.ToString();
FileShowForm fileShowForm = new FileShowForm(fileCode);
fileShowForm.ShowDialog();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}

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

pooria_googooli
سه شنبه 22 شهریور 1390, 00:43 صبح
ممنون . میشه طریقه استفاده اش را بگی . من از این تابع تو keydown گریدم استفاده کنم ؟ پارامتراشو چی بزارم موقع استفاده ؟

seven7777777
سه شنبه 22 شهریور 1390, 01:15 صبح
نه نه
این تابع رو به صورت جدا استفاده کنید نه توی رویداد خاصی .
همینجوری کپیش کنید توی کدهای فرمتون .
این تایع میاد و یک کلید فشرده شده رو میگیره و اونجوری که خواستید باهاش رفتار می کنید .
نکتش اینه که کلید رو وقتی میگیره که هنوز رخدادش به رویداد آبجکت مورد نظر نرسیده .
موفق باشید

pooria_googooli
سه شنبه 22 شهریور 1390, 13:01 عصر
خب توی چه قسمتی بذارم ؟ form_load یا form_keydown یا .... ؟

pooria_googooli
سه شنبه 22 شهریور 1390, 13:14 عصر
الان متوجه شدم کجا رو می فرمایید . برای سوال دومم جوابی ندارید؟

seven7777777
سه شنبه 22 شهریور 1390, 15:13 عصر
ببینید این یه تابع API هست . شما لازم نیست اونو صدا کنید یا بهش پارامتر ارسال کنید .
این تابع در بین کدهای شما قرار می گیره ، مانند یک رویداد یا یک تابع جداگانه .
وقتی شما کلیدی رو فشار دادید ، قبل از هر چیز این تابع عمل میکنه و کاری که شما میخواید رو میکنه .
برای اینکه خوب متوجه شید ، به جای کدهای من یه MessageBox.Show بزنید و برنامه رو اجرا ککنید تا متوجه منظورم بشید .
موفق باشید

pooria_googooli
سه شنبه 22 شهریور 1390, 15:51 عصر
بله متوجه شدم . خیلی خیلی ممنونم . مشکل دومم هم حل شد . میذارم اینجا تا اگه کسی کارش گیر کرد استفاده کنه .
private void gridEX1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Enter)
{
this.gridEX1.SelectCurrentCellText();
}
}