|
The best solution is to use a NumericUpDown control[^] instead of a textbox. It does all that for you already...
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
We use something like the code below for a WinForms TextBox control, and I imagine it could be adapted to anything with a KeyPress or similar event.
private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
{
var control = sender as TextBox;
if (control != null && !char.IsControl(e.KeyChar))
{
string testString = control.Text.Substring(0, control.SelectionStart) + e.KeyChar +
control.Text.Substring(control.SelectionStart + control.SelectionLength);
e.Handled = !ValueIsNumeric(testString, 5, 2, -100.00, 200.00, true, true);
}
}
private bool ValueIsNumeric(string testString, int precision, int scale, decimal? minValue,
decimal? maxValue, bool allowNegativeValues, bool allowNullValues)
{
bool result = false;
if (precision < 0)
{
precision = 0;
}
if (scale < 0)
{
scale = 0;
}
if ((precision - scale) < 0)
{
precision = 0;
scale = 0;
}
if (string.IsNullOrWhiteSpace(testString))
{
if (allowNullValues)
{
result = true;
}
}
else
{
bool checkDefinitionMinMax = true;
int periodIndex = testString.IndexOf('.');
if (periodIndex >= 0)
{
if (scale > 0)
{
if (testString.Substring(periodIndex + 1).Length > scale)
{
checkDefinitionMinMax = false;
}
}
else
{
checkDefinitionMinMax = false;
}
}
decimal value = 0;
if (checkDefinitionMinMax && decimal.TryParse(testString, out value))
{
decimal maxDefinitionValue = decimal.Parse(string.Empty.PadLeft(precision, '9'));
if (scale > 0)
{
string p = string.Empty.PadLeft(precision - scale, '9');
string s = string.Empty.PadLeft(scale, '9');
maxDefinitionValue = decimal.Parse(string.Format("{0}.{1}", p, s));
}
decimal minDefinitionValue = 0;
if (allowNegativeValues)
{
minDefinitionValue = maxDefinitionValue * -1;
}
if (value >= minDefinitionValue && value <= maxDefinitionValue)
{
if (minValue.HasValue | maxValue.HasValue)
{
if (minValue.HasValue & maxValue.HasValue)
{
if (value >= minValue.Value && value <= maxValue.Value)
{
result = true;
}
}
else if (minValue.HasValue)
{
if (value >= minValue.Value)
{
result = true;
}
}
else if (maxValue.HasValue)
{
if (value <= maxValue.Value)
{
result = true;
}
}
}
else
{
result = true;
}
}
}
}
return result;
}
|
|
|
|
|
On the one hand, I think developing step-by-step solutions for problems like this is a valuable educational experience for C# students that gets them familiar with character input, the Char Type, and the Switch statement; from another POV, it's something those familiar with RegEx can do relatively easily, and much more succinctly. And, as others have pointed out, can be handled by the NumericUpDown Control.
Left for you to do in the following example is implementing code to limit the range of legal input values: I would do that by handling either the Leave Event, or by handling the Enter Keydown, or, at the cost of more computation, the TextChanged Event. Think about whether at some point you want to notify the user the input value is invalid.
Usually ... users expect the Enter and Tab Keys to do something: think about that.
I suggest you sub-class a TextBox, and handle the character input like this:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows.Forms;
namespace FourFormUI
{
[ToolboxItem(true)]
public partial class DoubleTextBox : TextBox
{
public DoubleTextBox()
{
InitializeComponent();
}
private bool delimiterSeen = false;
private const char delimiter = '.';
private const char backspace = '\b';
private const char minus = '-';
private string AllowedChars = ".-\b01234567890";
private List<char> allowedChars;
private int postDelimiterLimit = 3;
public DoubleTextBox(IContainer container)
{
container.Add(this);
InitializeComponent();
allowedChars = AllowedChars.ToCharArray().ToList();
}
private void DoubleTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
var ch = e.KeyChar;
if (!allowedChars.Contains(ch))
{
e.Handled = true;
return;
}
switch (ch)
{
case delimiter:
{
if (delimiterSeen)
{
e.Handled = true;
return;
}
delimiterSeen = true;
break;
}
case backspace:
{
delimiterSeen = Text.Contains(delimiter);
break;
}
case minus:
{
if (this.SelectionStart != 0)
{
e.Handled = true;
return;
}
break;
}
default:
{
if (delimiterSeen)
{
int delimiterpos = Text.IndexOf(delimiter);
if (this.SelectionStart > delimiterpos)
{
if (Text.Length - delimiterpos > postDelimiterLimit)
{
e.Handled = true;
return;
}
}
}
break;
}
}
}
}
}
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
Rap Gutierrez wrote: When users put the invalid numbers it will remove the newly inputted value ex 11.999 it will become 11.99 while typing.
Just noting that in terms of business use that is probably overkill. Validate the input, tell them what value is wrong, but don't try to auto-correct (for one thing how do you know for sure that the modified form is what they really wanted.)
|
|
|
|
|
jschell wrote: Validate the input, tell them what value is wrong By preventing the entry of "illegal characters" you avoid this.jschell wrote: don't try to auto-correct ( ditto.
By weeding out spurious entry, and constraining entry, you are avoiding confusing the user, particularly the naive user. You are also training them to use the input ui properly.
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
please am a beginner in programing and i want the guidelines for preparing project work matrix in c# language.thank you
|
|
|
|
|
I have no idea what you're talking about.
If you're just learning programming, learning the language would probably be a lot better than trying to whatever you're talking about in some kind of "matrix".
|
|
|
|
|
I'm sorry, but that is a meaningless question - there are no "guidelines" that fit everything.
Sit down, think about what you have to do and try to work out what it is that you can't do, and describe that. We really can't help you based on "guidelines for preparing project work matrix in c# language" because it doesn't tell us anything at all about where you are stuck!
Start by explaining where you are at the moment, and what the next step in the process is. Then tell us what you have tried to get that next step working, and what happened when you did.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
You have posted some days ago to a similar question (I don't find it in the moment - perhaps Q&A) something like :
- design the UI
- ...
I think that could be a "useful" answer to this "question" ...
|
|
|
|
|
|
|
Here de link: Re: c# - C# Discussion Boards[^]
Juist right click the title, and select "Copy link address" (In Chrome, may be slightly different in Firefox, and probably needs the Microsoft Store, four reboots, and a UWP app in Edge)
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Member 14190267 wrote: project work matrix
Googling on that suggests that you are asking about a management task and not a coding task.
If so then this is the wrong place. And if that then in general no one can tell you how to do that since it depends on the actual work to be done.
|
|
|
|
|
Hello,
I want to quantization the value of HSV color using Non-equal Intervals with C#, I made a search but found nothing
I need a source code/pseudocode for that method
any help will be appreciated
Thanks
|
|
|
|
|
We are more than willing to help those that are stuck: but that doesn't mean that we are here to do it all for you! We can't do all the work, you are either getting paid for this, or it's part of your grades and it wouldn't be at all fair for us to do it all for you.
So we need you to do the work, and we will help you when you get stuck. That doesn't mean we will give you a step by step solution you can hand in!
And just asking for the code doesn't win you any friends...
Start by explaining where you are at the moment, and what the next step in the process is. Then tell us what you have tried to get that next step working, and what happened when you did.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
You will find lots of detailed explanations of HSV colour on the internet. Writing the C# code to perform actions on the values is your task.
|
|
|
|
|
The code is as follows,Set to file p
try
{
if (AvCoBox.SelectedIndex < 0) return;
MainCamera.SetSetting(PropertyID.Av, AvValues.GetValue(AvCoBox.Text).IntValue);
}
catch (Exception ex) { ReportError(ex.Message, false); }
|
|
|
|
|
Please don't repost if your question does not appear immediately: all of these went to moderation and required a human being to review them for publication. In order to prevent you being kicked off as a spammer, both had to be accepted, and then I have to clean up the spares. Have a little patience, please!
I've deleted the "extras" and kept the one with code.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
What's in "AvCoBox.Text"? How can you be sure it has a valid value when you don't even bother checking it before firing it off?
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
I had all my classes made public so that I could use variables in any part of the code.
I found that if I used the variable 'i' like this Name[i] where 'i' had been declared a integer then I could not use 'i' elsewhere in my program.
To get over this problem I had to add the code maxcount=i; then I could refer to the variable maxcount elsewhere in my code.
There must be a good reason for this but as I'm new to C# I found this strange.
I also find that sometimes you need an instance of a variable (Students student = new Students) and other times you don't need to do this.
I'm still trying to get my head around reasons for this when learning C#.
Brian
Brian
|
|
|
|
|
A class should be a black box, where you don't have to know about the inside, and can't muck up the internal state from the outside. The parts where you find you need access to a variable, you'll often need a property.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Thanks Eddy for giving me another way of understanding things in C#.
Correct me if I'm wrong but I'm also thinking that an instance variable is a reference to a variable.
Brian
|
|
|
|
|
Doesn't have to be; you can also have a value-type as an instance variable. If it is not a value-type, then it is indeed a reference.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
It sounds like you're not using OOP at all and just declaring all of your variable and classes as static. That's not good practice.
But, that's just a guess as we can't see you're code and you haven't posted any.
|
|
|
|
|
Hi Dave.
Sorry but my code is a bit messy as I'm experimenting while learning C#.
At the bottom of the code you'll find num=i; then near the top I have numberOfVerbs = num;
I could not use numberOfVerbs = i;
I have found out since that I could have used the .long command to find out how many CollectText's created.
I use to be able to run the code without errors but something has changed to cause some errors.
namespace Lads_in_CSharp
{
public class Program
{
int i = 0;
int num;
int numberOfVerbs;
int y=0;
int a = 0;
String Text1="";
String[] CollectText = new String[1000];
String [] TT = new String[3] ;
public static void Main(string[] args)
{
Program prog = new Program();
StreamReader sr = new StreamReader("demo.adv");
Console.WriteLine("Start of Program");
prog.y = 4;
prog.ReadHeader(sr);
Console.WriteLine(prog.i);
prog.ReadVerbs(sr);
prog.ReadNouns(sr);
prog.ReadObjects(sr);
prog.ReadStartRoom(sr);
prog.ReadRooms(sr);
prog.ReadMessages(sr);
prog.ReadAutoActions(sr);
prog.ReadActions(sr);
sr.Close();
Console.Read();
}
public void ReadHeader(StreamReader sr)
{
Console.WriteLine("Read Header");
ReadLineOfText(sr);
Console.WriteLine("Text1 is: " + sr);
}
public void ReadVerbs(StreamReader sr)
{
Console.WriteLine("Read Verbs++++++++++");
int i=0;
ReadLineOfText(sr);
numberOfVerbs = num;
Console.WriteLine("Text1 is:: " + Text1);
Console.WriteLine("Collect Text 2 = "+CollectText[2]);
Console.WriteLine("Number of Verbs is "+num);
Console.WriteLine("Comma separated strings");
{
i = 0;
while (a < 10)
{
string[] parts = CollectText[1].Split(',');
foreach (string part in parts)
{
Console.WriteLine("part = {0} ", part);
i++;
if (i == 1)
{
TT[i] = part;
}
else
{
TT[i] = part;
}
a++;
}
}
}
Console.WriteLine("TT[1] = " + TT[1]);
Console.WriteLine("TT[2] = " + TT[2]);
i++;
}
}
public void ReadNouns(StreamReader sr)
{
Console.WriteLine("Read Nouns ++++++++++++++++++");
ReadLineOfText(sr);
Console.WriteLine("Text1 is: " + Text1);
}
public void ReadObjects(StreamReader sr)
{
Console.WriteLine("Read Objects+++++++++++++");
ReadLineOfText(sr);
Console.WriteLine("Text1 is: " + Text1);
}
public void ReadStartRoom(StreamReader sr)
{
Console.WriteLine("Read Start Room+++++++++++");
ReadLineOfText(sr);
Console.WriteLine("Text1 is: " + Text1);
}
public void ReadRooms(StreamReader sr)
{
Console.WriteLine("Read Rooms+++++++++++++");
ReadLineOfText(sr);
Console.WriteLine("Text1 is: " + Text1);
}
public void ReadMessages(StreamReader sr)
{
Console.WriteLine("Read Messages+++++++++++");
ReadLineOfText(sr);
Console.WriteLine("Text1 is: " + Text1);
}
public void ReadAutoActions(StreamReader sr)
{
Console.WriteLine("Read Auto Actions+++++++++");
ReadLineOfText(sr);
Console.WriteLine("Text1 is: " + Text1);
}
public void ReadActions(StreamReader sr)
{
Console.WriteLine("Read Actions");
ReadLineOfText(sr);
Console.WriteLine("Text1 is: "+Text1);
}
public void ReadLineOfText(StreamReader sr)
{
Text1 = "null";
i = 0;
while (Text1 != "")
{
Text1 = sr.ReadLine();
Console.WriteLine("ReadLine is: [read from ReadOfText producer]" + Text1);
i++;
CollectText[i] = Text1;
}
i = i-1;
num = i;
Console.WriteLine(i);
}
}
<pre>
|
|
|
|