PDA

View Full Version : عمل نکردن رویداد KeyDown برای کلید Insert



farashah_jalal
دوشنبه 17 آبان 1389, 18:00 عصر
private void Window_KeyDown(object sender, KeyEventArgs e)
{
if (TbItemHouse.IsSelected==true)
{
if (e.Key==Key.Insert)
{
AddClick();
}

این کدبرای زمانی که در صفحه کلید insert فشرده شد باید رخ دهد .اما زمان فشردن این کلید
کد مورد نظر اجرا نخواهد شد. برای بقیه کلید ها کار می کنه اما برای این کلید حالتی رخ نمی ده ممنون میشم اگه راهنمایی کنید.

مهدی فرزاد
دوشنبه 17 آبان 1389, 18:39 عصر
سلام
من کدت رو تست کردم و انجام میده احتمالا مشکلت از جای دیگست
اینم نومنه ای که من تست کردم

farashah_jalal
دوشنبه 17 آبان 1389, 21:51 عصر
private void Window_KeyDown(object sender, KeyEventArgs e)
{
if (TbItemHouse.IsSelected==true)
{
if (e.Key==Key.N)
{
AddClick();
}
else if (e.Key == Key.F2)
{
BtnSave();
}
else if (e.Key == Key.Escape)
{
CancelClick();
}
}

کدی که من نوشتم این هست .
کد شما کار می کنه ولی تو برنامه من کار نمی کنه همه کلید ها کار می کنه هم escو f2
نمی دونم چرا کار نمی کنه؟

مهدی فرزاد
سه شنبه 18 آبان 1389, 00:01 صبح
توی این کد شما بجای

(e.Key==Key.Insert)نوشتید
(e.Key==Key.N)
با این هم کار نمیکنه؟؟ یعنی کلید N رو هم که میزیند کار نمیکنه؟؟
اگه آره پس این متدد ()AddClick مشکل داره ، جاش یه مسیج باکس بگذار ببین عمل میکنه؟؟

farashah_jalal
سه شنبه 18 آبان 1389, 11:45 صبح
الان با کلید N کار می کنه . فکر کنم برای درج کلید insert بهتر باشه.
وقتی insert باشه کار نمی کنه.

مهدی فرزاد
سه شنبه 18 آبان 1389, 13:00 عصر
بجاي KeyDown توي KeyUP بنويس


privatevoid Window_KeyUp(object sender, KeyEventArgs e)
{
if (TbItemHouse.IsSelected == true)
{
if (e.Key == Key.Insert)
{
e.Handled = true;
MessageBox.Show("Good");
}
}
}


اين كد e.Handled = true هم حتما بگذار

اين كد زير رو هم توي KeyDown چك كن


privatevoid Window_KeyDown(object sender, KeyEventArgs e)
{
if (TbItemHouse.IsSelected == true)
{
if (Convert.ToInt32(e.Key) == 31)
{
e.Handled = true;
MessageBox.Show("good");
}
}
}

farashah_jalal
چهارشنبه 19 آبان 1389, 13:16 عصر
بجاي KeyDown توي KeyUP بنويس


privatevoid Window_KeyUp(object sender, KeyEventArgs e)
{
if (TbItemHouse.IsSelected == true)
{
if (e.Key == Key.Insert)
{
e.Handled = true;
MessageBox.Show("Good");
}
}
}


اين كد e.Handled = true هم حتما بگذار

اين كد زير رو هم توي KeyDown چك كن


privatevoid Window_KeyDown(object sender, KeyEventArgs e)
{
if (TbItemHouse.IsSelected == true)
{
if (Convert.ToInt32(e.Key) == 31)
{
e.Handled = true;
MessageBox.Show("good");
}
}
}

اگه کلید N رو بزارم زمانی که کاربر می خواد داخل فرم یک textboxرو پر کنه کلید Nاز صفحه کلید فشرده بشه اون کلید رخ خواهد داد.

مهدی فرزاد
چهارشنبه 19 آبان 1389, 15:02 عصر
این کد ها رو برای دکمه Insert دادم چک کردی؟؟

farashah_jalal
شنبه 22 آبان 1389, 11:28 صبح
کد هام رو داخل رویداد key up گذاشتم به نتیجه نرسیدم . ممنون از جواب هاتون

Amir Oveisi
یک شنبه 23 آبان 1389, 16:01 عصر
در کل تو WPF برای مدیریت کلید ها بهتره از command ها استفاده کنید. به این شکل که برای کار مورد نظر یک command تعریف می کنید و اعمال لازم رو در اون command انجام میدین. بعد میتونین برای اجرا شدن command تون، یک کلید هم تعریف کنید:
مثال زیر رو ببینید:

<KeyBinding Key="I" Modifiers="Control" Command="{Binding InsertCommand}"/>

command ای به نام InsertCommand در برنامه تعریف شده و در داخل window، کلید های Ctrl+I برای اجرای اون command معرفی شده است.

برای اطلاعات بیشتر در زمینه command ها مطلب زیر را مطالعه کنید:
http://msdn.microsoft.com/en-us/library/ms752308.aspx

موفق باشید

davoodrm666_666
پنج شنبه 11 آذر 1389, 18:21 عصر
همانطور که Amir Oveisi (http://barnamenevis.org/member.php?17736-Amir-Oveisi) گفتند در WPF بهتره از Command استفاده ده کنی
مثال:




<Window x:Class="WpfApplication2.shortKey"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication2"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
Title="shortKey" Height="292" Width="415">
<Window.CommandBindings>
<CommandBinding Command="{x:Static local:shortKey.ctrlRCommand}" Executed="OnCommandExec"/>
<CommandBinding Command="{x:Static local:shortKey.f2Command}" Executed="OnCommadExecF2"/>
</Window.CommandBindings>
<Grid>
</Grid>
</Window>

Code Behind
public static RoutedCommand ctrlRCommand = new RoutedCommand();
public static RoutedCommand f2Command = new RoutedCommand();
public shortKey()
{
InitializeComponent();
ctrlRCommand.InputGestures.Add(new KeyGesture(Key.R, ModifierKeys.Control));
f2Command.InputGestures.Add(new KeyGesture(Key.F2));
}
private void OnCommandExec(object sender, ExecutedRoutedEventArgs e)
{
MessageBox.Show("Ctrk+R Press");
}
private void OnCommadExecF2(object sender, ExecutedRoutedEventArgs e)
{
MessageBox.Show("F2 Press");
}

farashah_jalal
پنج شنبه 11 آذر 1389, 22:07 عصر
سلام
اگه امکان هست بیشتر در مورد command ها توضیح بدید . مثلا هر کد رو به صورت مجزا و با توضیح مربوط به خودش

saed2006
دوشنبه 15 آذر 1389, 12:31 عصر
سلام
اگه امکان هست بیشتر در مورد command ها توضیح بدید . مثلا هر کد رو به صورت مجزا و با توضیح مربوط به خودش

شما با command ها میتونید تاثیر تعویض مقادیر روی فرم رو در کد ببینید یا تاثیر تغییرات کد رو بلافاصله روی کنترل های متصل به command ببینید

saed2006
دوشنبه 15 آذر 1389, 13:35 عصر
این رو
http://assets.devx.com/sourcecode/37893_rq_mainsource.zip
نگاه کن