|
I realize it is not valid C# code - I said it was a "Description" of the code. I did not put it in red as the code tag would do, and I mentioned that it works most of the time. If this were truly the 'code', it would not be compiling far less working most of the time. The true code has been executed by 11 people, 6 hours a day, for 2 years. In that time the error situation I am describing has occurred about 4 times. The code itself sits on another computer and is too voluminous to reproduce here. This is not a syntax problem. If someone is on the level where they could answer this question, I think they are at the level they can fill in the blanks in the outline and perfect C# is not needed.
I don't know what you mean by side-by-side and what that has to do with how code executes. The 3 items you mention serve different purposes. m_FormC is the class itself. m_FormCOpen is the boolean that tracks whether the form is dipslayed or not. Remember, the class can be instantiated but the form not necessarily displayed at a given time. FormCIsOpen is the property which allows other classes access to the member variable m_FormCOpen. Thus, you see, there are not several bools that try to keep track - there is only one. There are reasons why one class displays the form and another needs to know if it is displayed or not. The question is, that being the case, is there a safer way to accomplish it. Or, is there a known Windows/.NET problem where forms in hiding suddenly come out of hiding. You haven't given a meaningful alternative or any explanation for why the methodology here would fail.
My impression is you were too quick to respond. Slow down. If you don't want to take the time to understand something that isn't immediately obvious to you, it would be better to not respond at all than to do so in a nonconstructive manner. Saying the code is a complete mess is not constructive. Confusing a class with a bool with a property is not constructive. But, if you were truly trying to be helpful, then thanks for taking the time.
|
|
|
|
|
A form knows whether it is visible or not, there is no need to try to keep that in a boolean.
Less code = less bugs
Better readability = better code
|
|
|
|
|
For this design, there is. Note that 'the boolean' is in ClassB - not FormC. FormC does know when it closes, but method1 has already finished its execution by this time. FormC alerts others to its closing via an event. ClassB sets the boolean based on this event. ClassA can now access the information via a property provided by ClassB. ClassB has visibility to FormC. FormA does not. Thus, FormA cannot ask FormC are you open or closed.
|
|
|
|
|
Well... I realize that this is not the real code, but rather a pseudo code of it...
However, it looks like this code is not thread-safe.
This means that there might be a chance that sometimes, under certain circumstances, m_FormCOpen is misleading your program because of thread-safety issues.
If you don't know what "thread-safe" means, I'de suggest reading on the following topics:
- Thread Safety
- Threads Synchronization
- Locking Mechanisms.
Good luck,
Shy.
|
|
|
|
|
Here's a theory:
If someone clicks twice in FormA fast enough for the second click to be queued before the form is hidden, it would open two instances of FormC. When closing one of the instances, FormA would be shown.
You can prevent multiple instances of FormC to be opened:
private void UserSelection_Click() {
if (!m_ClassB.FormCIsOpen) {
m_ClassB.method1();
if (m_ClassB.FormCIsOpen) {
Hide();
}
}
}
---
single minded; short sighted; long gone;
|
|
|
|
|
This is a very good theory - especially from the excerpt I put out. I had greatly simplified UserSelection_Click. The selection comes from a VS 2003 data grid - the code is determining a double click based on MouseUp, etc. Things stop, i.e., the clock doesn't start for a second double click, until method1 has completed, so I don't think this is exactly the problem. Maybe something similar to what you are describing is happening earlier in the pipe, though. I just haven't been able to find it yet. And, your code suggestion is good to put in as a fail-safe. If nothing else, if the problem pops up again with this code in, then it will narrow down the possibilities some more. Thanks.
|
|
|
|
|
Fix turned out to be:
Application.DoEvents();
Hide();
|
|
|
|
|
I'm creating C# WinForms client-server database application.
This application reads data from PostgreSQL server using npgsql Dataadapter and DataReader classes and stores data mostly in Datasets and sometimes in business object properties.
A lot of lookup tables (payment terms, currency list etc) are static.
Currently application reads them from server always over TCP connection.
This makes application slow.
How to cache data in client side ?
Where to find caching module for .NET application ?
It it reasonable to use .NET 2 Web Cache object for this ?
Web Cache object doc says that it is designed only for ASP .NET application.
Is it reasonable to use it in WinForms application or are there better
caching object available.
I cannot use MS Caching application block since my application needs to run in
Linux also.
Andrus
|
|
|
|
|
AndrusM wrote: How to cache data in client side ?
Where to find caching module for .NET application ?
Have you looked at the Enterprise Library?
AndrusM wrote: I cannot use MS Caching application block since my application needs to run in
Linux also
I take it that it doesn't compile in Mono then?
Upcoming events:
* Glasgow: Mock Objects, SQL Server CLR Integration, Reporting Services, db4o, Dependency Injection with Spring ...
* Reading: Developer Day 5
Never write for other people. Write for yourself, because you have a passion for it. -- Marc Clifton
My website
|
|
|
|
|
I this I can compile in under MONO since this is open source.
However Microsoft licence prohibits its using on non-windows environment.
Is it reasonable to use AppDomain cache:
AppDomain.CurrentDomain.SetData("key", value);<br />
DataSet ds = (DataSet)AppDomain.CurrentDomain.GetData("keyname");<br />
or are there any better soluton ?
Andrus
|
|
|
|
|
We know the label in DevExpress .NET v7.1 controls can change its forecolor augomatic when the skin changed.But I found that the checkedit can not change its forecolor augomatic when the skin changed.
My question is How to change the checkedit's forecolor augomatic when the skin changed.
Thanks a lot!
|
|
|
|
|
You are seeking assistance with a third party tool. DevExpress has their own support forums, you should seek assistance there.
Here are the forums: http://www.devexpress.com/Support/Forums.xml[^]
Upcoming events:
* Glasgow: Mock Objects, SQL Server CLR Integration, Reporting Services, db4o, Dependency Injection with Spring ...
* Reading: Developer Day 5
Never write for other people. Write for yourself, because you have a passion for it. -- Marc Clifton
My website
|
|
|
|
|
Hi
plz if anyone can help
this is the code
{
string str = "bahaa";
int result = Convert.ToInt32(x);
}
it gives an exception "Input string was not in a correct format."
|
|
|
|
|
??
there is something wrong I think.
Convert.ToInt32() normally takes a string; I dont know what x is.
if you meant Convert.ToInt32(str);
then obviously that would fail because str does not look like a number at all.
|
|
|
|
|
yes that what i meant but can't i change it to assci code
|
|
|
|
|
Convert.ToInt32() expects a string that represents an integer, such as "123" in which case
it would return 123
if you want the integer value of an ASCII character you could do something like:
string str="bahaa";
char c=str[0];
int i=(int)c;
|
|
|
|
|
Luc Pattyn wrote: if you want the integer value of an ASCII character you could do something like:
string str="bahaa";
char c=str[0]; // gets first char
int i=(int)c;
Strictly speaking it's not at all an ASCII character, it's a Unicode character, as strings in .NET are Unicode, not ASCII.
---
single minded; short sighted; long gone;
|
|
|
|
|
Right.
I should have written "if you want the integer value of a character ..."
|
|
|
|
|
Hi All,
What is difference between these two initializations of _obj:
1)
<br />
public class Class1<br />
{<br />
public Class1()<br />
{<br />
}<br />
private Class2 _obj = null;<br />
}<br />
2)
<br />
public class Class1<br />
{<br />
public Class1()<br />
{<br />
_obj = null;
<br />
}<br />
private Class2 _obj = null;<br />
}<br />
Would there be difference between 1) and 2), if Class2 is a class from another referenced dll?
|
|
|
|
|
Hi,
with your code it is the same because both contain a line
private Class2 _obj = null;
furthermore an object reference is null by default when it is a class member.
There are circumstances where there would be a difference; examples:
1) when _obj has to be initialized to something other than null, and its value is
required before an object of Class1 is being instantiated (maybe its needed by some
public static methods/properties).
2) when the constructor would fail (throw an exception) and hence not reach the
initialization statement.
|
|
|
|
|
Me too thought that the initilizations in 1) and 2) were same.
But I had a problem in Design mode when 2) was used.
I could solve the problem when 1) was used instead.
I am just too confused. I dotn find any reason why it behaves differntly.
Let me explain in deatil.
MyClass1 is a UserControl class. MyClass1 is to be used in frmMain (Main Form)class.
MyClass2 is a class in another dll which is referenced in the project and used in MyClass1.
I have two Confusions:
Confusion-A) The designer of MyClass1 opens fine even if 1) or 2) is used.
Confusion-B) assuming I use method 2) - When I try to add the UserControl class MyClass1 in the designer of frmMain, I get an error that it could not add the control. Mysteriously enough if I use method 1) instead, everything worked fine.
Since MyClass2 is in another dll, would it initialize it differently if initialized in constructor or while declaring it?
Note: Both ways the _obj is initialized as null.
|
|
|
|
|
ArtiGujare wrote: Confusion-A) The designer of MyClass1 opens fine even if 1) or 2) is used.
That's good.
ArtiGujare wrote: Confusion-B) assuming I use method 2)
OK, I am not sure but this is what I expect is happening:
- the line private Class2 _obj=null; does not do much: it reserves a 4 (or 8) byte
reference which is defaulted to zero; it does not need to know what Class2 actually is,
so the compiler will insist on knowing Class2, but at run-time Class2 is not needed,
since there is no code corresponding to this line.
- the line _obj=null; in the constructor is assigning to a variable of type Class2; at
run-time this is the first time Class2 is referenced, so the JIT will try to load and
compile it (although the statement does not require any knowledge of Class2, by definition
this is when Class2 needs to get initialized). Now at design time (which also runs the
constructor), it will fail to find the dll containing Class2 since it searches relative
to the location of Visual itself, not your project. This I guess is the issue you must
solve, but no I do not know how.
Hope this helps.
|
|
|
|
|
Hi,
Im trying to trim a peice of text, the below code is how i do it:
StringFormat stringFormat = new StringFormat();<br />
stringFormat.Trimming = StringTrimming.EllipsisCharacter;<br />
Font font = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Bold, GraphicsUnit.Pixel);<br />
RectangleF rect = new RectangleF((float)Layout.X + 25, (float)Layout.Y + 10, (float)Layout.Width - 25, (float)Layout.Height - 10);<br />
<br />
g.DrawString(nodeTag.NodeName, font, Brushes.Black, rect, stringFormat);
Layout is the rect values of a node i draw, i then draw the text on top, and if its to big, trim it. The problem im having is that instead of trimming the text and replacing the charactors with "...", it puts the affect text on a new line which i dont want to happen.
Any ideas?
Regards,
Gareth.
|
|
|
|
|
Hi Gareth,
I guess your rect is too high; I expect DrawString to trim only if the text does not fit
the given rect.
Remedy: reduce rect.Height or add StringFormat.NoWrap to your StringFormat.
|
|
|
|
|
Hi Luc,
As you suggested, StringFormatFlags.NoWrap fixed my problem.
Thanks,
Gareth.
|
|
|
|