|
Hi there. I need some help here.
I am trying to convert a sample application for learning purposes. But i am stuck to see this:
Select Case ShipPitchSM
Case Is > 0
ShipPitchSM = ShipPitchSM - Friction
If ShipPitchSM < 0 Then ShipPitchSM = 0
If ShipPitchSM > 0.03 Then ShipPitchSM = 0.03
Case Is < 0
ShipPitchSM = ShipPitchSM + Friction
If ShipPitchSM > 0 Then ShipPitchSM = 0
If ShipPitchSM < -0.03 Then ShipPitchSM = -0.03
End Select
Select Case ShipYawSM
Case Is > 0
ShipYawSM = ShipYawSM - Friction
If ShipYawSM < 0 Then ShipYawSM = 0
If ShipYawSM > 0.03 Then ShipYawSM = 0.03
Case Is < 0
ShipYawSM = ShipYawSM + Friction
If ShipYawSM > 0 Then ShipYawSM = 0
If ShipYawSM < -0.03 Then ShipYawSM = -0.03
End Select
Select Case ShipRollSM
Case Is > 0
ShipRollSM = ShipRollSM - Friction
If ShipRollSM < 0 Then ShipRollSM = 0
If ShipRollSM > 0.03 Then ShipRollSM = 0.03
Case Is < 0
ShipRollSM = ShipRollSM + Friction
If ShipRollSM > 0 Then ShipRollSM = 0
If ShipRollSM < -0.03 Then ShipRollSM = -0.03
End Select
Any help?
How do you code that in c#? I try my best to place conditions in case statements, but compile errors.
Thanks.
Regards,
Chua Wen Ching :p
|
|
|
|
|
if (ShipPtchSM < 0)
{
...
}
else if (ShipPtchSM > 0)
{
...
}
etc...
Every line of code is a liability - Taka Muraoka A doable project is one that is small enough to be done quickly and big enough to be interesting - Ken Orr
Latest AAL Article
My blog
|
|
|
|
|
You have to use if, elseif, and else.
if(ShipPitchSM>0)
{
ShipPitchSM-= Friction;
ShipPitchSM = Math.Max(0,ShipPitchSM);
ShipPitchSM = Math.Min(ShipPitchSM,0.03);
}else
{
ShipPitchSM += Friction;
ShipPitchSM = Math.Min(0,ShipPitchSM);
ShipPitchSM = Math.Max(-0.03,ShipPitchSM);
}
"Blessed are the peacemakers, for they shall be called sons of God." - Jesus
"You must be the change you wish to see in the world." - Mahatma Gandhi
|
|
|
|
|
Ah, even better than my example. Very nice.
Marc
Every line of code is a liability - Taka Muraoka A doable project is one that is small enough to be done quickly and big enough to be interesting - Ken Orr
Latest AAL Article
My blog
|
|
|
|
|
But you've got the best idea in your second post.
"Blessed are the peacemakers, for they shall be called sons of God." - Jesus
"You must be the change you wish to see in the world." - Mahatma Gandhi
|
|
|
|
|
Thanks everyone.
So switch/case does not accept conditions... i need to do if/else for it!
Thanks a lot.
Regards,
Chua Wen Ching :p
|
|
|
|
|
Better yet:
AdjustParam(ref double param, double friction)
{
if (param < 0)
{
param=param + friction;
if (param > 0) param=0;
if (param < -0.03) param=-0.03;
}
else
if (param > 0)
{
param=param - friction;
if (param < 0) param=0;
if (param > 0.03) param=0.03;
}
}
then call:
AdjustParam(ref ShipPitchSM, Friction);
AdjustParam(ref ShipYawSM, Friction);
AdjustParam(ref ShipRollSM, Friction);
and there's other optimizations you can make too. Get then sign of the parameter and you can eliminate the if-else clause. Put the bounds checking in a separate helper function. Things like that.
Marc
Every line of code is a liability - Taka Muraoka A doable project is one that is small enough to be done quickly and big enough to be interesting - Ken Orr
Latest AAL Article
My blog
|
|
|
|
|
you can easily do it with the <color="blue">switch statement ( it is really an equivalent to Select Case , just have to modify it slightly to tell if it's a + value or not, here's a simple example i made.
C#:
<font color="blue">private</font> <font color="blue">void</font> val() <br> { <br> <font color="#0000FF">int</font> x =-1; <br> <font color="#0000FF">switch</font>(x.CompareTo(0)<0) <br> { <br> <font color="#0000FF">case true</font>: <br> MessageBox.Show("the value is less than zero!"); <br> <font color="#0000FF">break</font>; <br> <font color="#0000FF">case false</font>: <br> MessageBox.Show("the value is greater than zero!"); <br> <font color="#0000FF">break</font>; <br> } <br> } <br>
hope it helps to understand the switch statement a bit more
|
|
|
|
|
This is not exactly equivalent though.
In the original code, the test is '< 0' and '> 0'. Your code is '< 0' and '>= 0', causing an inneficiency when x==0 (not that the original code was very efficient to begin with!)
If you wanted to preserve the logic of the original test with a switch statement, you would need to properly qualify the test if a trinary operator:
switch (x < 0 ? -1 : x > 0 ? 1 : 0)
{
case -1:
...
case 0:
...
case 1:
...
} Hope that helps to understand how refactoring needs good test cases!
Marc
STL, a liability factory - Anonymously A doable project is one that is small enough to be done quickly and big enough to be interesting - Ken Orr
Latest AAL Article
My blog
|
|
|
|
|
Why don't you use switch ()
|
|
|
|
|
I'm writing a small app for my own use (mostly to play with an XML datastore) I'm trying to add a node to the xml document. This works fine, except that it keeps on adding an empty xmlns attribute to the new nodes. Is there anyway of stopping this?
I am contructing the xml node from a string
<NewNode>
<DataNode />
</NewNode>
and inporting it into the xml document like this.
<br />
xmlContactsList["Root"].AppendChild(NewNode);<br />
But the result I keep getting is
<doctype tag>
<Root>
<NewNode xmlns="">
<DataNodes />
</NewNode>
</Root> Is there anyway of getting rid of the xmlns attribute? The root node already has the correct value for this.
|
|
|
|
|
i have a form which includes search parameters at the top.
i want the datagrid to begin directly under the search fields.
the data grid needs to stretch from left to right no matter what size the form is, but i do not want to dock it to the bottom.
when i dock it to the bottom, then maximize, there is a big gap between the datagrid and the search fields.
is there any way to align the top of the data grid to a point, and still make it stretch from left to right no matter what the size of the form is?
|
|
|
|
|
If you're working in the VS.Net forms designer, set the Dock property to None, then set the Anchor property to all sides.
If you're hand coding, do it like this:
dataGrid.Dock = DockStyle.None;
dataGrid.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right);
|
|
|
|
|
Hi Folks,
How can I access system properties so that my app will match the appearance of the User's setting? Particularly after Fonts and colours.
Thanks,
Davy
My Personal Blog - Homepage. Scottish News - Angus Blog, Perth Blog and Dundee Blog
|
|
|
|
|
Davy Mitchell wrote:
How can I access system properties so that my app will match the appearance of the User's setting? Particularly after Fonts and colours.
Are you simply interesting in persisting user settings which you can load when the application starts and saving them when it ends?
-Nick Parker
|
|
|
|
|
Hi Nick,
No - I am after the system settings that can be set under the Appearance tab of the Display Properties (rightclick desktop).
Davy
My Personal Blog - Homepage. Scottish News - Angus Blog, Perth Blog and Dundee Blog
|
|
|
|
|
Maybe Control.DefaultFont and Control.DefaultIForgotWhat can help you.
|
|
|
|
|
hi,
i have a object in a ArrayList. i need to search a record in list and return it. since it is in multi-thread environment, i want to return a deepcopy of that object rather return the reference of it. and, release lock of the list.
how can i do?
thanks,
jim
|
|
|
|
|
|
How can I hide the Horiz scroll bar
public myClass : DataGrid
{
public myClass() : base()
{
this.HorizScrollBar.Visible = false;
}
doesnt do anything?
I'm not an expert yet, but I play one at work. Yeah and here too.
|
|
|
|
|
How do you indicate a default property or is that not possible and the toString is assumed?
I'm not an expert yet, but I play one at work. Yeah and here too.
|
|
|
|
|
There's no such thing as a default property in the same way as there is with VB(.NET or otherwise). Even ToString() isn't that. Come to think of it, ToString() isn't even a property, it's a method. I don't mean that to sound patronising, but it is an important distinction in C#.
Some functions will receive an object and use ToString() beause it's one of the few methods / properties available to everything deriving from object . But that's not the same thing as what I think you're asking about.
The function still has to call ToString() explicitly, while a VB "default property" is something used in the absense of a property. Default properties make for very confusing code sometimes (for very little gain, IMO) and C# is attempting to avoid that.
However, albeit in a completely different context, there are such things as Default Properties in C#: as in the property that is selected by default when a control is selected.
By your mention of ToString(), I don't think that's what you're looking for. If it is then I apologise and either I or someone else will explain that
Paul
|
|
|
|
|
Well my whole reasoning is that I have classes tied to a data grid and inside this class lies other objects. Is there a way I can tell the datagrid for this object I wil grab "abc" property or method?
That was myh reasoning not really a default but it pulls the
public override string ToString() method by default and thats how I synchronized the data but is there ways up specifying other properties or methods?
I'm not an expert yet, but I play one at work. Yeah and here too.
|
|
|
|
|
Well, this kind of thing is exactly what overriding ToString() is for: "How would you disply this object in String Format?" So a datagrid can say "I can only deal with display strings - so how has the developer told me to handle this object?".
If it works then I can't think of a single reason to try to do it another way. It's certainly not a hack, if that's what you're thinking; it's the sensible way of handling it. If you have a specific reason for wanting to do it differently then there probably is a way.
Give a simple example of what you're trying to do, if possible.
Paul
|
|
|
|
|
CustomerList : IBindingList
here I implemented this class and this adds Customer objects
CUstomer : IEditableObject
This is the customer class
inside is
private CVendor objVendor;
public CVendor Vendor
{
get { return objVendor; }
set { objVendor = value; }
}
And what I did was created a class that inherits the DataGrid and assinged a customer tab le style
I want to display Vendor.Name property
but when I tie this property it gives the default toString which is ACS.Vendor (namespace:class)
so I overrided the ToString()
what I would like is a way to map inside my column directly to custom properites within a class
thanks for the help
nick
I'm not an expert yet, but I play one at work. Yeah and here too.
|
|
|
|