Hello,
I'm facing a little problem concerning the radVirtualKeyboard control. I'm located in France and I would like the virtual keyboard to have the AZERTY-laoyout. No matter If I use the property SynchronizeCultureWithSystem or if I set the culture info manually, the keyboard only adapts some of the keys but the general layout remains QWERTY.
I'm using the code
radVirtualKeyboard1.SynchronizeCultureWithSystem = false;
radVirtualKeyboard1.VirtualKeyboardElement.CurrentCulture = new System.Globalization.CultureInfo("fr-FR", false);
This is the result:
The code
radVirtualKeyboard1.SynchronizeCultureWithSystem = false;
radVirtualKeyboard1.VirtualKeyboardElement.CurrentCulture = new System.Globalization.CultureInfo("de-DE", false);
leads to this result which is not correct as well because the german keyboard layout is QWERTZ
Is there maybe another property to set to apply the culture info to the entire keyboard?
Thank you in advance and have a nice day!
Jana
2 Answers, 1 is accepted
Hello, Jana,
As you noted RadVirtualKeyboard has a default QWERTY keyboard layout.
Currently, the keyboard layout is not updated for specific cultures, but this seems to be a reasonable request. That is why I have logged it in our feedback portal by creating a public thread on your behalf. You can track its progress, subscribe for status changes and add your comments on the following link - feedback item.
I have also updated your Telerik points.
In order to achieve an AZERTY layout, you can swap the Q with A keys and W with Z keys from the keyboard. Here is a code sample that illustrates this approach:
SimplifiedVirtualKeyboardLayoutPanel simplifiedLayoutPanel = this.radVirtualKeyboard1.MainLayoutPanel as SimplifiedVirtualKeyboardLayoutPanel;
VirtualKeyboardLayout mainLayout = simplifiedLayoutPanel.MainButtonsLayout;
// Find the W, Q, A and Z keys and their indices in their corresponding row.
Key Qkey = mainLayout.Rows[1].Keys.FirstOrDefault(k => k.VirtualKey == (int)Keys.Q) as Key;
int qKeyIndex = mainLayout.Rows[1].Keys.IndexOf(Qkey);
Key Wkey = mainLayout.Rows[1].Keys.FirstOrDefault(k => k.VirtualKey == (int)Keys.W) as Key;
int wKeyIndex = mainLayout.Rows[1].Keys.IndexOf(Wkey);
Key Akey = mainLayout.Rows[2].Keys.FirstOrDefault(k => k.VirtualKey == (int)Keys.A) as Key;
int aKeyIndex = mainLayout.Rows[2].Keys.IndexOf(Akey);
Key Zkey = mainLayout.Rows[3].Keys.FirstOrDefault(k => k.VirtualKey == (int)Keys.Z) as Key;
int zKeyIndex = mainLayout.Rows[3].Keys.IndexOf(Zkey);
// Remove the keys from their old position
mainLayout.Rows[1].Keys.Remove(Qkey);
mainLayout.Rows[1].Keys.Remove(Wkey);
mainLayout.Rows[2].Keys.Remove(Akey);
mainLayout.Rows[3].Keys.Remove(Zkey);
// Add the keys on their new positions Q-A and W-Z
mainLayout.Rows[1].Keys.Insert(qKeyIndex, Akey);
mainLayout.Rows[1].Keys.Insert(wKeyIndex, Zkey);
mainLayout.Rows[2].Keys.Insert(aKeyIndex, Qkey);
mainLayout.Rows[3].Keys.Insert(zKeyIndex, Wkey);
// Force the layout to update
mainLayout.ResetLayout(true);
The suggested way to use this modified layout is to store it in an XML file and load it when your application starts. I have saved and attached a ZIP with XML files with the AZERTY and QWERTZ layouts. You can simply load them using the LoadLayout method of RadVirtualKeyboard.
this.radVirtualKeyboard1.LoadLayout(@"..\..\Layouts\azerty.xml");
//this.radVirtualKeyboard1.LoadLayout(@"..\..\Layouts\qwertz.xml");
I hope this information helps. If you need any further assistance please don't hesitate to contact me.
Regards,
Todor Vyagov
Progress Telerik
Love the Telerik and Kendo UI products and believe more people should try them? Invite a fellow developer to become a Progress customer and each of you can get a $50 Amazon gift voucher.
Hello Todor,
Thank you very much for your reply and for the layout examples, that helps me a lot to progress.
Have a nice day,
Jana
Hello again,
I know it's been a while since the last communication here in this thread but I have indeed just a little more question about this subject. I would like to create an own layout in an XML file like the one you've attached me. As I can see, the keys are identified by keyType and by virtualKey= with a number behind. Is there somewhere a kind of overview existing, which shows which key has which number?
Thank you again and have a nice day!
Hello, Jana,
If you want to create your own layout in an XML file like the one Todor has attached you can use the Save/Load layout functionality that RadVirtualKeyboard offers. Please refer to the following article: https://docs.telerik.com/devtools/winforms/controls/virtual-keyboard/save-and-load-layout
Feel free to customize the keyboard and create the desired layout as demonstrated here according to your specific needs, then save the layout by calling the SaveLayout method. Those layout settings would be written in an XML file and the necessary information about keys would be automatically stored.
I hope this information helps. Do not hesitate to contact us if you have other questions.
Regards,
Nadya
Progress Telerik
Love the Telerik and Kendo UI products and believe more people should try them? Invite a fellow developer to become a Progress customer and each of you can get a $50 Amazon gift voucher.
Hello Dess,
Thank you very much for your further explanation, I understand.
I tried to create a custom layout of a numeric keyboard and a simplified azerty keyboard. The example of Todor was unfortunately not 100% complete AZERTY so I had to change also the positions of buttons with accents and special characters. But that is not serious :)
So I tried to modify the keyboard layout and on runtime it's all fine. But if I try to load my custom layout in another project, the keyboardForm doesn't apply the layout at all. Am I missing something?
I attached you the demo project in which I modify the layout as well as a second demo project in which I try to load the custom layout. Thank you in advance for your help!
https://easyupload.io/m/ng6mwt
What I would like to achieve:
Hello again,
I'm sorry to flood you with a lot of questions :)
I noticed another problem with the keyboards. In the meantime until there is an answer to my previous post, I wanted to already integrate the keyboards with my desired layout into my main application I'm currently working on. So I didn't load the layout from an xml file, but I copied the code snipped to arrange the buttons from my test project that I've attached to my previous post.
My main application is meant to run on a Windows 10 tablet (Dell Latitude 7212).
I'm facing the following problem: If I run this app on my PC, the numeric keyboard is displayed correctly. But for the AZERTY-Keyboard, I receive this result:
Some keys were placed well, some others not.
When I run my app on the tablet, I receive this same result for the AZERTY keyboard. But also the numeric keyboard is not correct at all:
I'm a bit surprised as the keyboard layout changes between the Windows 10 laptop and the Windows 10 tablet even if the code was not changed. Do you have any idea which properties or information I can check out in order to resolve this?
Thank you very much in advance!
Hi Jana,
Thanks for the sent project. It helped me a lot to investigate the precise scenario.
1) Save layout
I have reviewed the saved layout and I confirm that you hit a serialization issue that is fixed in our latest version R3 2021 - "RadVirtualKeyboard: Modified and saved layout cannot be loaded".
If you cannot upgrade or do not plan to upgrade to our latest version, you can manually modify the second line of the serialized file with XML:
From:
<MainLayoutPanel xsi:type="Telerik.WinControls.VirtualKeyboard.SimplifiedVirtualKeyboardLayoutPanel"
<MainLayoutPanel xsi:type="Telerik.WinControls.VirtualKeyboard.VirtualKeyboardLayoutPanel"
2) Numeric keyboard
RadVirtualKeyboard tracks the state of several keys - for example, Crtl, Caps Lock, Num Lock. The keys in the NumLock layout are special keys that display different symbols, depending on the NumLock key of the Windows. If the NumLock is activated - the numbers are visible, else the arrows and page up/down buttons are displayed.
In your case, it seems that the NumLock is not active.
In order to use numeric key values, you can toggle the NumLock key if it is off and unsubscribe the numeric keyboard from all key events, and if the NumLock key is pressed the numeric keys will not convert to arrows.
if (!RadVirtualKeyboardElement.IsNumLockOn)
{
VirtualKeyboardNativeMethods.Send(null, (int)Keys.NumLock);
}
RadVirtualKeyboardElement.UpdateKeysListenersList.Remove(radVirtualKeyboardFormNumeric.KeyboardForm.VirtualKeyboard.VirtualKeyboardElement);
I hope this information helps. If you need any further assistance please don't hesitate to contact me.
Regards,
Todor Vyagov
Progress Telerik
Virtual Classroom, the free self-paced technical training that gets you up to speed with Telerik and Kendo UI products quickly just got a fresh new look + new and improved content including a brand new Blazor course! Check it out at https://learn.telerik.com/.