|
Heath Stewart wrote:
Consider this, though: after you've finished you're essentially created a DataGrid.
A very good point.
Thanks for your advice, very educational. I'll take the DataGrid route for now, it should do what I need.
Michael
But you know when the truth is told,
That you can get what you want or you can just get old,
Your're going to kick off before you even get halfway through.
When will you realise... Vienna waits for you? - "The Stranger," Billy Joel
|
|
|
|
|
I have a client calling methods in a remote server object.
The client gets data, displays it to the user, and sends updates to the server via method calls.
I am now on 1.1 Framework AND I have implemented the TypeFilterLevel=Full
We can send atomic data to the server (bool, string, etc.) but when I send my collection (marked [Serializable]) back to the server, I get the infamous Security violation error. Since I've already deployed the documented fix, what is the next step? I should be able to pass this data back to the server??!!!
______________________________
The Tao gave birth to machine language. Machine language gave birth to the assembler.
The assembler gave birth to the compiler. Now there are ten thousand languages.
Each language has its purpose, however humble. Each language expresses the Yin and Yang of software. Each language has its place within the Tao.
But do not program in COBOL if you can avoid it.
|
|
|
|
|
Many developers have been trying to figure out a way to simulate VB6 style default property in C#.
I thought of using operator overloads first. Since assignment operator doesn't overload, I used implicit to type cast.
MyClass c="Test String";
Console.WriteLine(c);
It is implemented in the following class using implicit type casting operator
class MyClass{
public static implicit operator MyClass(string s) {<br />
MyClass c=new MyClass();<br />
c.Text=s;<br />
return c;<br />
}<br />
private string _Text;<br />
public string Text{<br />
get{return _Text; }<br />
set { _Text = value; }<br />
}<br />
public override string ToString() { return Text;}<br />
}
Does someone know a simpler way?
Fakher Halim
|
|
|
|
|
That's really the only way to do it. There is no "default property" in the Common Type System (CTS), which defines how types and members are defined. So, since MyClass is not a String , you have to use an operator as you've done.
Frankly, I think the whole thing is silly. What's so hard about instantiating and assigning the Text property? Using the operator you incur one more call on the call stack.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Those VB6 developers were INSISTING on not using MyClass.Text and just assigning MyClass directly with a string , as they would do in pre-.NET days
The classical example was a Label control, where both of following mean the same:
lblEnterName.Caption = "Enter full name"<br />
lblEnterName = "Enter full name"
Fakher Halim
|
|
|
|
|
I understand what the intentions are, but this isn't VB6 - it's the .NET Framework. Change is inevitable.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Heath Stewart wrote:
Frankly, I think the whole thing is silly. What's so hard about instantiating and assigning the Text property? Using the operator you incur one more call on the call stack.
I couldn't agree more.
|
|
|
|
|
I find it a very interesting way of simulating it.
But, frankly, I always hated this on VB, as this made the syntax very ambiguous.
Due to technical difficulties my previous signature, "I see dumb people" will be off until further notice. Too many people were thinking I was talking about them...
|
|
|
|
|
Yes, it is absolutely counter intuitive in today's strongly typed world, but sometime you need to address some irrational requirement.
Fakher Halim
|
|
|
|
|
Your method does NOT simulate default properties. It creates a new object and resets the handle, which could be disastrous from both a performance and stability standpoint. It's interesting nonetheless.
I agree with both Heath Stewart and Daniel Turini: the syntax is awful from an object-oriented perspective anyway, which is why they didn't build it in. This should be one of the times you just say "no", and you have the excellent support of not actually being able to provide the functionality!
Regards,
Jeff Varszegi
|
|
|
|
|
I agree.
It is just to illustrate how to create a new class instance out of a string. Of course it doesn't have code to add string into an existing instance, nor it has similarity to a VB6 control for that matter.
Sure it is a weird syntax -- shocking to any OO person, and that is exactly why I posted this so called VB6 compatibility possibility -- knowing the controversy.
Fakher Halim
|
|
|
|
|
I feel your pain, believe me. I have to admit that it is a fun little problem, one of those ones that always seems just out of grasp. I can't find any way to do it without some modification of the runtime.
Regards,
Jeff Varszegi
|
|
|
|
|
Hi,
I have a datagrid with 2 icon columns, I found when the screen needs to repaint, the 2 icon columns slow down the painting, it seems that loading icons is taking time, any idea about how to make loading of icons faster?
Thanks
|
|
|
|
|
For starters, if you're creating a Graphics instance yourself (probably not, but anyway...), make sure you dispose of it when finished or memory consumption will increase (call Graphics.Dispose() when finished). The same goes for the Icon . If you don't, it will take longer and longer because your memory consumption increases. Eventually you may exhaust the working memory alloc'd to your process.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi !
I will use similary method like Redim in c#
How can i do ???
dim toto(3) as string
redim preserve toto(4)
Thanks
|
|
|
|
|
C# has no redim aka VB. Take a look at the ArrayList class though.
|
|
|
|
|
Ok thanks a lot
|
|
|
|
|
Andrew's message is entirely correct: there is no Redim, and the ArrayList class addresses the problem by rendering things like Redim unnecessary. Here's how you can "redim preserve" an array in C#, if you choose not to use ArrayList or something like it:
<br />
string[] toto = new string[3];<br />
<br />
string[] newToto = new string[4];<br />
Array.Copy(toto, 0, newToto, 0, toto.Length);
toto = newToto;<br />
newToto = null;
ArrayList is nothing magic, just a wrapper around an array. The major differences between the above code snippet and the use of ArrayList is that ArrayList takes care of the array copying seamlessly for you, that ArrayList keeps track of how many items have been added to it (you have to keep this in an extra variable otherwise), and that every index access incurs the overhead of a method call. This method call overhead can significantly slow down code that heavily uses an ArrayList, which is why when I'm writing code for speed (which I do much, but not all, of the time) I prefer to just manage my own arrays.
A tip: if you know in advance roughly the number of items you might see, you can save yourself some ArrayList-internal array copying by setting the initial capacity in the constructor.
Regards,
Jeff Varszegi
|
|
|
|
|
Hi:
I want to Enable/disable the mouse and keyboard .
But I do not know which function that I can use.
Could you give me some addvices.
Thank you.
|
|
|
|
|
Are you talking about disabling the keyboard and mouse system wide or just in your app?
System wide, you could write a low level keyboard and mouse hooks or use Application.AddMessageFilter in your app. You'll be receiving every mouse and keyboard message before it is dispatched to its destination. When you get the keyboard or mouse message, it is up to you to either pass that message on to its destination or not do anything with it at all. Doing nothing will result in the message being dropped and essentially disabling the keyboard and/or mouse.
WARNING: Improperly writing code or writing poor performing code for these methods can result in serious performance degradation issues system wide.
What trigger do you plan to use to re-enable the keyboard and mouse?
RageInTheMachine9532
|
|
|
|
|
Or just unplug them!
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Why not just provide a delegate and event that can be registered when the second form is created, and hook in an event handler on the first form before you show the second form.
[EDIT] What happened to my thread, the forum must not have liked my response! [/EDIT]
- Nick Parker My Blog | My Articles
|
|
|
|
|
|
Heath Stewart wrote:
You could do that, but it seems like an aweful lot to do for something as simple as passing a reference to your ListView or just getting the database from the second form to put into your first, kind of like an InputBox of yesteryear.
Figures you wouldn't totally agree with something I said!
- Nick Parker My Blog | My Articles
|
|
|
|
|
That's not it at all.
Microsoft MVP, Visual C#
My Articles
|
|
|
|