|
Thanks for feedback. However, I think perhaps there's a bit of misunderstanding here. I understand how to hook up event handlers with event and fire it and all that. I understand how the compiler injects code into the source and our "delegate" become a "class". What I do not understand is, however, the syntax:
int = int + int (the type matches, no problem)
But:
MyDelegate d = new MyDelegate(this.MyHandler);
this.MyEvent += d;
It seems to me type doesn't match up, here's why:
On LEFT SIDE of "+=", type is MyEvent --> It's an "event".
On RIGHT SIDE of "+=", type is MyDelegate --> It's a "delegate" (Of course it expands to a class).
How does it work? Or perhaps I'm asking too much. Sometimes, developers should just take it and code it. Thanks.
norm
|
|
|
|
|
I really hope someone with more experience than me can follow up on this:
I think what goes on in the back is that there is an overloaded operator that adds the delegate (or function pointer) to a collection or list (the event model?), what goes on is not really saying MyEvent(event) EQUALS MyDelegate(delegate type), but saying "add this delegate to my list of function pointers to call when I'm triggered".
Or maybe your last sentence really summed it up!
|
|
|
|
|
norm wrote:
MyDelegate d = new MyDelegate(this.MyHandler);
this.MyEvent += d;
The event hold a *linked-list* of delegates, d becomes an instance of that delegate and is added to the chain. This way, we check to make sure there are items in the *linked-list* and then fire the event:
void OnMyEvent(string str)
{
if(MyEvent != null)
MyEvent(str);
}
HTH
-Nick Parker
|
|
|
|
|
Woa! I wasn't that far off.. I shall celebrate with a cold one after work!
|
|
|
|
|
Thanks Nick. But you too, have misunderstood the question, or perhaps I didnt state it clearly enuf:
"MyDelegate d = new MyDelegate(this.MyHandler);
this.MyEvent += d;
The event hold a *linked-list* of delegates, d becomes an instance of that delegate and is added to the chain. This way, we check to make sure there are items in the *linked-list* and then fire the event:"
>> Yes, it holds a link list. But let me emphasize again:
"this.MyEvent" --> Type: event
"d" --> Type= delegate
I KNOW the syntax and that compiler expands delegates into class. Just don't understand how "type" on left/right side can be DIFFERENT. Did they overload "+=" operator on event?
norm
|
|
|
|
|
I can run my C# .net application in the system I use to develop it, but when I deployed the application to a windows 2000 system with .netframework installed, I got below message:
System.Security.SecurityException: Request for the permission of type
System.Data.SqlClient.SqlClientPermission,System.Data, Version= 1.0.5000.0, Culture= neutral,
PublickeyToken=b77a5c561934e089 failed.
at System.Security.CodeAccessSecurityEngine.CheckHelper(PermissionSet grantedSet,PermissionSet deniedSet, CodeAccessPermission demand,PermissinToken permToken,
.....
It seems that I can't get the permission to access Sql server. Could you pls tell me how to resolve this issue? Can anyone help to let me know how to set the permission to the application / user ?
Thanks.
coby
|
|
|
|
|
Just curious, does the credentials in your connection string have the proper security access ?
R.Bischoff
.NET, Kommst du mit?
|
|
|
|
|
It seems that the issue is because the .net framework can't get the permission to run sql store procedure locally. What I can saw is the connection string can get the server and uid but the pwd is cut. Actually, I did nothing to cut it in the program. Really strange, isn't it?
|
|
|
|
|
In my application I have say, twenty tabs, that I either want to show or hide based on the value provided in a ComboBox.
Call them ATab1 Atab2...ATab20. Is it possible for me to create some looping thing so that I can go through a loop based
based on the number provided in the Combo box (also 1 to 20) ?
mamaflynny
|
|
|
|
|
...hmmm.. not sure, but
...why not have an Array of tabs (indexed 0 through 19)
and loop by that?
I implemented this solution for a series of Image boxes,
so I'm not sure if it would work nicely for tabs...
HTH,
F.O.R.
|
|
|
|
|
Hi, having some problem parsing XML. How do I print the name of an XML attribute?
<sometag attriba="AAA" attribb="BBB">
SomeText
if(reader.NodeType==XmlNodeType.Element)
{
Console.Write("Element: {0}", tr.Name);
for(int i=0; i
|
|
|
|
|
Norm,
I've been able to pull the names of elements and attributes from an xml file using xpath. The code below will help you do it. Don't forget to add: using System.Xml.XPath;
XmlTextReader xtr = new XmlTextReader( m_sXmlFilePreferences );
while( xtr.Read() )
{
switch( xtr.NodeType )
{
case XmlNodeType.Attribute:
break;
case XmlNodeType.Element:
if( xtr.HasAttributes )
{
if( xtr.Name == "Preferences" )
{
for( int i = 0; i < xtr.AttributeCount; i++ )
{
xtr.MoveToAttribute( i );
if( xtr.Name == "EmailAddress" )
{
m_sEmailAddress = xtr.Value;
txt_Email.Text = m_sEmailAddress;
}
if( xtr.Name == "UpdateAutomatically" && xtr.Value == "true" )
{
m_bUpdateInvestments = true;
checkBox1.Checked = true;
}
if( xtr.Name == "UseEncryption" && xtr.Value == "true" )
{
m_bUseEncryption = true;
checkBox2.Checked = true;
}
if( xtr.Name == "PlayAlerts" && xtr.Value == "true" )
{
m_bPlayAlerts = true;
checkBox3.Checked = true;
} }
}
} // HasAttributes
break;
case XmlNodeType.Text:
break;
case XmlNodeType.CDATA:
break;
case XmlNodeType.ProcessingInstruction:
break;
case XmlNodeType.Comment:
break;
case XmlNodeType.XmlDeclaration:
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
break;
case XmlNodeType.EntityReference:
break;
case XmlNodeType.EndElement:
break;
default :
break;
The structure of the xml file is as follows:
EmailAddress="youremailadderess@yourisp.com"
UpdateAutomatically="true" UseEncryption="true"
PlayAlerts="true"
I hope this helps.
|
|
|
|
|
Thanks I've got it - I neglected MoveToAttribute()
norm
|
|
|
|
|
Is there a method for defineing macros in C# like you can in C++? In C# the #define directive is only for defining symbols.
#define AddAandB (a + b)
|
|
|
|
|
C# doesn't have macro support.
|
|
|
|
|
Thank the lord for that one
I'm not an expert yet, but I play one at work. Yeah and here too.
|
|
|
|
|
In my application I have three combo box drop down lists containing text. I want to create an event handler that
will not allow the contents of ComboBox1 also be selected by ComboBox2 and ComboBox3. How do you do this?
mamaflynny
|
|
|
|
|
override the change event or simply when one is chosen delete the item from the other 2 and add and so on
I'm not an expert yet, but I play one at work. Yeah and here too.
|
|
|
|
|
i'm trying to use the streamreader in csharp to read a .ged file (ascii text). i got it to work but i want to know if there is anything i can do to make it better, ie. programming format, speed, style, etc.
thanks,
Rob
<-----------START----------->
public string[] GetIndex()
{
//
if (fstream == null)
{
MessageBox.Show("Error opening file stream.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
return null;
}
StreamReader fstreamCopy = fstream;
string textLine;
int index;
bool foundName = false;
ArrayList tmpIndex = new ArrayList();
while (fstreamCopy.BaseStream != null)
{
foundName = false;
try
{
textLine = fstreamCopy.ReadLine().Trim();
index = textLine.IndexOf("INDI");
if (index != -1)
{
while (!foundName)
{
textLine = fstreamCopy.ReadLine().Trim();
index = textLine.IndexOf("NAME");
if (index != -1)
{
tmpIndex.Add(textLine.Substring(index + 4).Trim());
foundName = true;
}
}
}
}
catch
{
fstreamCopy.Close();
}
}
string[] indIndex = new String[tmpIndex.Count];
for (int i = 0; i < tmpIndex.Count; i++)
{
indIndex[i] = tmpIndex[i].ToString();
}
return (indIndex);
//
}
<------------END------------>
There are 10 kinds of people. Those who understand binary and those who don't.
|
|
|
|
|
Great, I'll try to add a few constructive comments:
1) Early on, you handle a null value for fstream by showing a message box, then returning a null from the GetIndex() function. Typically, in C# we handle that sort of unexpected condition by throwing a an exception, rather than returning null. Error handling can be done at higher levels with try/catch blocks.
2) I'm guessing you might be thinking the line
<br />
StreamReader fstreamCopy = fstream; is copying the original StreamReader fstream, so that it's position won't be changed. It doesn't work that way, since StreamReader is a reference class, you assignment just creates an alternate name for the same object fstream referrs to.
3) At the bottom, you loop through the ArrayList to create a string array to return. There might be a better way to do this:
tmpIndex.CopyTo( 0, indIndex, 0, tmpIndex.Count );<br />
Burt Harris
|
|
|
|
|
thanks for the help and information. what would you recommend to be the best way to read an ascii file? can i keep it in memory somehow so i can search it at will or should i just read the file everytime i need to?
thanks,
Rob
|
|
|
|
|
You're welcome. Sorry for the delay, I've been on vacation, RVing the Oregon Coast. It was really great.
I'm not sure there is any generic "best" way, it depends on what you want to do with it. Keeping it in memory may help performance slightly, but the OS does enough caching that it's likely to have only a minimal effect in most cases, so I'd concentrate on what's most convienent from your application's standpoint to start. In many cases, I think about making a pass through a file, building an in-memory data structure from it's contents because I want to access it randomly (say by a persons's name) rather than sequentially.
Good luck
Burt Harris
|
|
|
|
|
I've been looking at a lot of C# code lately and have noticed that many people write property getters and setters inline, like this:
String Name
{
get { return m_name; }
set { m_name = value; }
}
I've always like to put curly braces on lines by themselves, but I find this style appealing. The problem is when a getter or setter is more than one line long. Then I end up with something like this:
String Name
{
get { return m_name; }
set
{
if (m_name == value)
return;
m_name = value;
UpdateSomething();
}
}
So the get is inline but the set is not. I'm not too thrilled about this inconsistency and would like some opinions on the matter.
How do you do it?
Thanks,
Alvaro
If you want to get to the top, prepare to kiss a lot of bottom. -- despair.com
|
|
|
|
|
I've always done it this way :
public string Name
{
get
{
}
set
{
}
}
even if the codes are only 1 line long. I know it makes my coded bloated but i figure, that's what the collapsing options are there for. Besides, they're much easier to read.
God, I pity me! - Phoncible P. Bone
If I end up Windows ME someone is going to be hurting. - One of the answers to a question for What OS are you
|
|
|
|
|
I'm with Nick, each brace on its own line no matter the amount of code within the get/set.
But I explicitly define regions around the code block; which I don't know if Nick does.
#region Public Properties
#region MyProp
public type MyProp
{
get
{
return myProp;
}
set
{
myProp = value;
}
}
#endregion
#region SecondProp
public t2 SecondProp
{
get
{
...
}
set
{
...
}
}
#endregion
#endregion This formats everything rather nicely so I can view just the properties and methods I want while looking at the source.
James
"My words but a whisper -- your deafness a SHOUT.
I may make you feel but I can't make you think." - Thick as a Brick, Jethro Tull 1972
|
|
|
|