|
Just picking one of the answers from Google which gives examples
[^]
|
|
|
|
|
WPF or Windows Forms?
I had to code a "numerics" only TextBox in WPF the other day (PreviewKeyDown event):
private void uxRunCount_PreviewKeyDown( object sender, System.Windows.Input.KeyEventArgs e ) {
bool ok = IsNumeric( e.Key );
if ( !ok ) {
e.Handled = true;
}
}
private bool IsNumeric( Key key ) {
if ( key == Key.Back || key == Key.Delete ) { return true; }
if ( key == Key.Tab || key == Key.Return ) { return true; }
if ( key >= Key.D0 && key <= Key.D9 ) { return true; }
if ( key >= Key.NumPad0 && key <= Key.NumPad9 ) { return true; }
return false;
}
|
|
|
|
|
When you write a KeyPress handler for the TextBox, you get two parameters:
private void myTextBox_KeyPress(object sender, KeyPressEventArgs e)
sender is the text box that generate the event.
e is the information on the key press.
This information includes the key pressed:
char keyPressedByUser = e.KeyChar; And Handled which is a bool which the TextBox looks at when you are finished to decide if it should treat the key as input or not. If you set it to true the Textbox will ignore the user input. If you leave it at false the TextBox will insert the character to the textbox.
You also have the Text property of the TextBox which means you can get the data currently in it.
From that and your labels, you should be able to work out how to restrict the user input just as you wanted.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
Something like this?
var allowedKeys = promesana_rec.Select(ch => (Keys)Convert.ToInt32(char.ToUpper(ch)));
e.SuppressKeyPress = !allowedKeys.Contains(e.KeyCode) && new[] { Keys.None, Keys.Shift }.Contains(e.Modifiers);
|
|
|
|
|
Not by preference, no.
Why are you converting your character to a Key value? Although you can, it's not good practice - and doing Linq Selects each time the user presses a key is hardly efficient.
What - exactly - do you have in your labels that you are comparing against?
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
Every time I start program it takes random word from database shuffle it and show letters of that word inside 12 labels!!!
|
|
|
|
|
So the letters in the labels are already characters, and you have them originally as a string, yes?
So don't faf about with converting them at all. Instead, use the string version. Then, when they type a character you can tell if any are permitted immediately by just using string.Contains:
private string theWord = "extemporized".ToUpper();
...
private void myTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
char keyPressedByUser = char.ToUpper(e.KeyChar);
if (!theWord.Contains(keyPressedByUser))
{
e.Handled = true;
return;
}
...
}
Multiples are harder. They take a bit more work to ensure that the user can only enter three "E"'s to the example I gave.
To do that, add another private variable:
private Dictionary<char, int> letters;
And when you read the word from your database, set it:
letters = theWord.GroupBy(c => c).ToDictionary(g => g.Key, g => g.Count());
Now you can use the Dictionary to decide if he has typed enough letters yet:
private void myTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (char.IsLetter(e.KeyChar))
{
char keyPressedByUser = char.ToUpper(e.KeyChar);
if (!theWord.Contains(keyPressedByUser))
{
e.Handled = true;
return;
}
int inputCount = myTextBox.Text.ToUpper().Where(c => c == keyPressedByUser).Count() + 1;
if (inputCount > letters[keyPressedByUser])
{
e.Handled = true;
return;
}
e.Handled = false;
}
} Note that you need the IsLetter check or backspace will stop working!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
When I insert these commands and start program I cannot type any letter,I can only insert numbers and symbols!!!!!
|
|
|
|
|
Did you do the dictionary create bit after you loaded the word?
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
Do you mean this:
letters = shuffled_word.GroupBy(c => c).ToDictionary(g => g.Key, g => g.Count());
|
|
|
|
|
Show me the code that reads the word and includes that.
Add the code of your textbox handler.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
private Dictionary<char, int> letters;
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
letters = promesana_rec.GroupBy(c => c).ToDictionary(g => g.Key, g => g.Count());
if (char.IsLetter(e.KeyChar))
{
char keyPressedByUser = char.ToUpper(e.KeyChar);
if (!promesana_rec.Contains(keyPressedByUser))
{
e.Handled = true;
return;
}
int inputCount = textBox1.Text.ToUpper().Where(c => c == keyPressedByUser).Count() + 1;
if (inputCount > letters[keyPressedByUser])
{
e.Handled = true;
return;
}
e.Handled = false;
}
}
|
|
|
|
|
So look at what is in promesana_rec and check that it is all uppercase. Use the debugger inside the KeyPress handler to check it.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
promesana_rec is shuffled word loaded from database and I converted it to uppercase and it's working now!!!!
|
|
|
|
|
Glad to hear it!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
Thank you very much for help!!!!
|
|
|
|
|
You're welcome!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
I am writing a CAD type program using spheres and other simple shapes. I once wrote something similar in vb6 with openGL (or it could have been XNA). I enjoyed 3d function set as the commands were similar to AutoCAD. Now that vb6 is gone and vb.net is on its way out, I am now learning/using c#. My goal is to distribute software freely with a product. There are tons of add-ons such as XNA, openGl and others.
Some of these are also on their was out. When the user installs my software, I do not want to get a conflict with their existing software structure or have the user go to a support site to get the 3d engine. Is C# comprehensive enough to not need an outside 3d function set? Is it now inclusive in c# or is it much simpler to use a 3d function set? If so, what function set is simple. I was very pleased with vb6 and the added 3d class. I could spin hundreds of objects on the screen with no lag time. On the same PC, it was much faster than Autocad
|
|
|
|
|
Member 1956108 wrote: vb.net is on its way out To where? I hadn't heard that. Visual Basic | Microsoft Docs[^]
Member 1956108 wrote: Is C# comprehensive enough to not need an outside 3d function set? I really doubt it, but do not know for sure.
There are two kinds of people in the world: those who can extrapolate from incomplete data.
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
PS, also delete your duplicate question. It irritates some people.
There are two kinds of people in the world: those who can extrapolate from incomplete data.
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
Member 1956108 wrote: XNA, openGl and others.Some of these are also on their was out OpenGL is not on its way out. It has been here for more than 20 years, but that does not make it "obsolete".
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
|
Thank you Gerry. The title says it all...
Easy 2D and 3D programming with WPF
|
|
|
|
|
Glad I could help. This is the guy who wrote the most on WPF graphics that I could find:
Dr. Xu | WPF Graphics[^]
|
|
|
|
|
I am in a search for a specific user in the Active Directory, I use this method but I give me a error in the FindAll , that I have not found solve.
This is the mistake: An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in System.DirectoryServices.dll
SearchResultCollection sResults = null;
try
{
string path = "LDAP:
DirectoryEntry dEntry = new DirectoryEntry(path);
DirectorySearcher dSearcher = new DirectorySearcher(dEntry);
dSearcher.Filter = "(&(objectClass=user))";
sResults = dSearcher.FindAll();
foreach (SearchResult searchResult in sResults)
{
if (searchResult.Properties["CN"][0].ToString() == "Administrator")
{
ResultPropertyValueCollection valueCollection =
searchResult.Properties["manager"];
foreach (Object propertyValue in valueCollection)
{
Console.WriteLine("Property Value: " + (string)propertyValue.ToString());
}
Console.WriteLine(" ");
}
}
}
catch (InvalidOperationException iOe)
{
}
catch (NotSupportedException nSe)
{
}
finally
{
if (sResults != null)
sResults.Dispose();
}
Console.ReadLine();
}
|
|
|
|