|
If MsgManager is in the same class, you can simply make connection a member variable of that class. If not, the only way I know of is to wrap the Thread within another class (or derive from Thread) and pass connection as a parameter to the constructor of the wrapper.
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
I was afraid of that. I just thought someone would have some nifty trick. Thanks for your response.
Regards,
Bob Robey
|
|
|
|
|
I have a little problem
I got a form with a lot off buttons.
i use this code to get the Text of the button i pushed:
string naam,naam2;
naam=sender.ToString();
naam2=naam.Substring(35);
textBox1.Text=naam2;
But the problem is i want to change the color of that button as well.
Could someone tell me how i can determin witch button i pussed with appling just one piece of code to all the buttons?
|
|
|
|
|
Have a common (i.e., the same) event-handler for all the buttons on your form, say ButtonClick. Implement this common event-handler as under, for example:
private void ButtonClick(object sender, System.EventArgs e)
{
if((Button)sender == button1)
{
button1.BackColor = Color.Green;
MessageBox.Show("button1 was clicked", "Form1");
}
else if((Button)sender == button2)
{
button2.BackColor = Color.Pink;
MessageBox.Show("button2 was clicked", "Form1");
}
else if((Button)sender == button3)
{
button3.BackColor = Color.Blue;
MessageBox.Show("button3 was clicked", "Form1");
}
else if((Button)sender == button4)
{
button4.BackColor = Color.Yellow;
MessageBox.Show("button4 was clicked", "Form1");
}
}
It works properly and identifies the correct button pressed. You can add your own code in place of the sample code above. If the number of buttons is too large, you can even consider having an ArrayList of the buttons.
|
|
|
|
|
Hello
you don't have to declare 2 string variables here. Try:
textBox1.Text = sender.ToString().Substring(35);
As to get the button, have you tried:
Button myButton = (Button)sender;
--------
"I say no to drugs, but they don't listen."
- Marilyn Manson
|
|
|
|
|
The sender argument of your Click event handler _is_ the button that was pressed.
So you can easily cast it to Button and then do with it whatever you want:
private void button_Click(object sender, System.EventArgs e)
{
Button b = sender as Button;
if (b != null)
{
foreach (Control c in this.Controls)
{
if (c is Button)
c.BackColor = SystemColors.Control;
}
b.BackColor = Color.Red;
}
}
Regards,
mav
|
|
|
|
|
And no one has suggested it yet... but this might help:
Button btn = (Button) sender;
MessageBox.Show(btn.Text); I hope this helps!
-- LuisR
Luis Alonso Ramos
Intelectix - Chihuahua, Mexico
Not much here: My CP Blog!
|
|
|
|
|
Ok heres a question its roaming my mind.
Whats the difference doing for example.
SqlConnection con= new SqlConnection(connection_string);
con.close();
con.dispoe();
and
con= null;
AFAIK i think this. Close just clsoes the connection and can be opened again, dipose frees the resources so it cant be opened again, must declare again and null makes the GC get it faster. With this object i see it clearly but its the same for others?
DataSet ds= new DataSet();
Lets take about datasets, if i do a ds.dispose() its completely erased? and what about if i do ds=null; whats will do if i return the dataset in a method and later i do a dispose or a null in the finally clausule.
Ty for ur time.
|
|
|
|
|
Not really. SqlConnection's Close and Dispose do the same thing, if you look at the code, Dispose calls Close. null doesn't necessarily make the GC get it faster, in general, the GC is intelligent enough to figure out that that object has no live references. The only place where setting to null is recommended is if that object is contained within a long living object.
So the answer is
1. Close and Dispose do the same thing. It has nothing to do with GC.
2. Setting to null doesn't make the GC get it faster in most cases.
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
The previous post is not entirely correct. Close() and Dispose() do not do the same thing with respect to a SqlConnection. It is true that Dispose() will close the connection if the ConnectionState is Open, but the converse is not true: if Close() is called, the SqlConnection is not disposed, and your initial assertion is correct - the connection may be re-opened.
In general, the following should ideally be true for disposable types (the concept of Close is not covered, since it doesn't really apply to the discussion, and may mean different things to different types - file streams, database connections, sockets etc.):
1. Dispose() should be responsible for cleaning up unmanaged resources and indicating to the GC that finalization is suppressed for the instance (suppressing finalization explicitly avoids the default two-pass collection of collectible objects). The value of Dispose() is that unmanaged resources can be reclaimed immediately (or nearly so), without waiting for the GC. Suppressing finalization for the object serves to streamline the garbage collection process so that it takes only one pass to reclaim the managed resources used by the object instead of two passes (one to finalize, one to reclaim).
2. Setting an object to null just drops a reference to the object, essentially setting it adrift in the (managed) heap until the GC executes and begins cleaning it up. There is no guarantee about when the resources for that object will be reclaimed.
For more info, look here.[^]
Hope this helps.
The most exciting phrase to hear in science, the one that heralds the most discoveries, is not 'Eureka!' ('I found it!') but 'That's funny...’
|
|
|
|
|
turbochimp wrote:
It is true that Dispose() will close the connection if the ConnectionState is Open, but the converse is not true: if Close() is called, the SqlConnection is not disposed
I don't understand. If Dispose calls Close(), then Dispose and Close must do the same thing. What do you mean by "the SqlConnection is not disposed" ? If you can call Open() on a connection on which you've called Close, you can as well call it after calling Dispose(). Dispose doesn't do anything extra, as you can see with a tool like Reflector.
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
Dispose calls Close, but Close doesn't call Dispose, so the two don't do the same thing!
You can do this:
SqlConnection conn = new SqlConnection(...);<br />
conn.Open();<br />
conn.Close();<br />
conn.Open();<br />
conn.Dispose();
but you will get an exception with this:
SqlConnection conn = new SqlConnection(...);<br />
conn.Open();<br />
conn.Dispose();<br />
conn.Open();
Regards,
mav
|
|
|
|
|
Well, if you have two methods A() and B(), and A does nothing but call B(), then they both do the same thing. If A called B and B called A, you'll get mutual recursion
That apart, you're right, I missed the fact that Dispose clears the ConnectionString property after calling Close(). This piece of code works fine.
SqlConnection conn = new SqlConnection(...);
conn.Open();
conn.Dispose();
conn.ConnectionString = "...";
conn.Open();
conn.Dispose();
I still do maintain that they both essentially do the same thing, I don't know why the FCL designers added code to clear the connection string.. If you ask me, Close and Dispose should do the same thing.
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
I think you are confused about the intended uses of Dispose() and Close() . They are very different. I would encourage you to read the same article I suggested in my original post.
I would also encourage you to look further into what actually happens when Dispose() is called on a SqlConnection (or any type that implements IDisposable , if it's implemented correctly). Specifically, in SqlConnection.Dispose() , you will (or should) see a call to base.Dispose(disposing) . If you had taken the time to inspect the base class (System.ComponentModel.Component ), you would have seen that there's a little more to the disposal of the SqlConnection instance than you indicated in either of your posts.
The most exciting phrase to hear in science, the one that heralds the most discoveries, is not 'Eureka!' ('I found it!') but 'That's funny...’
|
|
|
|
|
I admit that I was wrong with the semantics of Close() and Dispose with respect to SqlConnection .
What I'm still not convinced about is that Close is supposed to be a "customized" Dispose, as this[^] and this[^] link mention, [EDIT] but in the case of SqlConnection, they act differently.[/EDIT]
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
While I would have to place myself in the "Richter" camp on this as well, I understand the point these articles are trying to make, and I don't know if I really disagree with their implementations, except possibly from an aesthetic point of view.
My thinking is:
1. Dispose() has a clear definition and purpose regardless of type. If the type has unmanaged resources, and it may be important to release those resources in a time-critical manner, then the type will likely benefit from a Dispose() method.
2. Close() has a somewhat less well-defined purpose that is affected by the type on which it is implemented. It has a high-level meaning that applies in most places (i.e. "To stop or obstruct some kind of operation or behavior") and means the same thing to most people, but the specifics of how to "Close" an instance of a type are potentially specific to the type itself, as are the rules about re-opening the instance, how closing affects state, etc.
There are clearly some cases where Close() and Dispose() might effectively mean the same thing, as the first article suggests, but there are obviously others (e.g. SqlConnection ) where the intent of the developers was to make the methods behave differently. Both are okay in my book, but what can't get overlooked is that while Close() may or may not be implemented on a disposable type, the IDisposable interface ( thus Dispose() ) *must* be implemented, or unexpected results may ensue. In those cases where Close() and Dispose() are interchangeable, the word "Close" may be considered more "user friendly" or less confusing than "Dispose", and so a case can be made for implementing a Close() method that simply masks the Dispose() method.
In general though, I'd prefer a more expository API (one that had both methods marked public, if the developers really felt that strongly about it), but that's just me, and the decision really boils down to developer preference and the consuming client's perceived level of understanding.
Have a good one.
The most exciting phrase to hear in science, the one that heralds the most discoveries, is not 'Eureka!' ('I found it!') but 'That's funny...’
|
|
|
|
|
The general rule of thumb is that anytime you call Dispose any unmanaged resources that were allocated are now unavailable so doing anything further with the object is risky. Since the object is kind of in an invalid state using the object beyond the Dispose .
It should also be noted that Dispose can happen independant of Object.Finalize . Dispose is an interface so an object can deallocate resources and not meant as the general "death of the object". There is a whole side topic of the GC that should be discussed outside of the thread if you really care.
My general practice is when I'm done with an object that has to manage limited resources, I call Dispose (I usually try to place this in a finally block) and then set it to null so if anyone "accidently" tries to reuse the object it will throw a NullReferenceException .
|
|
|
|
|
Okay now i see it more clear. Cause im working with 2 mates and 1 always does null, the other allways do Close or Dispose, and when i asked what was the difference they didnt know what to answer me.
Ty for ur answers ppl.I appreciate ur help
|
|
|
|
|
Hello.
I am trying to copy a worksheet in excel to an another worksheet.Let's say, I have an existing excel file(ExcelSablon.xls) and want to create a new excel file in a different name.
........
// Make an instance of Excel.
ExcelApplication excel = new ExcelApplication();
// Show Excel on the desktop. (fast = running in the background)
excel.Visible = true;
// Add a new workbook.
Workbook workbook = excel.Workbooks.Add(System.Type.Missing);
Workbook workBookSource = excelSource.Workbooks.Open(@"C:\TqmFiles\Templates\ExcelSablon.xls",missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);
Worksheet workSheetSource = (Worksheet)excelSource.Sheets["Sheet1"];
Worksheet worksheet = (Worksheet)excel.ActiveSheet;
worksheet.Copy(workSheetSource,missing);
worksheet.SaveAs("C:\Temp\CopyOfExcelFile.xls", missing, missing, missing, missing, missing, missing, missing, missing, missing);
excel.Quit();
When I try to do this, it gives error in worksheet.Copy(workSheetSource,missing); statement.
Can anybody help me please?
Fatih Sen
|
|
|
|
|
You need to indicate what error you're receiving, for starters. You should also indicate what the value of the 'missing ' variable is (it should probably be something like Missing.Value ).
Also, I assume you plan to further use Excel automation to do something with the worksheet you copied, otherwise why not just use File.Copy ?
The most exciting phrase to hear in science, the one that heralds the most discoveries, is not 'Eureka!' ('I found it!') but 'That's funny...’
|
|
|
|
|
Hey guys,
With the help of this forum I came a long way on my learning proces getting connected to the Active Directory.:->
With an example from the MSDN I managed to get an listing of all groups including the users in that group:
strPath = "LDAP://domainname"; <br />
<br />
Console.WriteLine("Bind to: {0}", strPath);<br />
Console.WriteLine("Enum: Groups and members.");<br />
<br />
try{<br />
objADAM = new DirectoryEntry(strPath);<br />
objADAM.RefreshCache();<br />
}<br />
catch(Exception ex){<br />
Console.WriteLine("Error: Bind failed.");<br />
Console.WriteLine(" {0}", ex.Message);<br />
}<br />
<br />
<br />
try{<br />
objSearchADAM = new DirectorySearcher(objADAM);<br />
objSearchADAM.Filter = "(&(objectClass=group))";<br />
objSearchADAM.SearchScope = SearchScope.Subtree;<br />
objSearchResults = objSearchADAM.FindAll();<br />
}<br />
catch(Exception ex){<br />
Console.WriteLine("Error: Search failed.");<br />
Console.WriteLine(" {0}", ex.Message);<br />
}<br />
<br />
try{<br />
if(objSearchResults.Count != 0){<br />
foreach(SearchResult objResult in objSearchResults){<br />
objGroupEntry = objResult.GetDirectoryEntry();<br />
Console.WriteLine("Group {0}", objGroupEntry.Name);<br />
<br />
foreach(object objMember in objGroupEntry.Properties["member"]){<br />
Console.WriteLine(" Member: {0}", objMember.ToString());<br />
}<br />
}<br />
}<br />
else{<br />
Console.WriteLine("Results: No groups found.");<br />
}<br />
}<br />
catch(Exception ex){<br />
Console.WriteLine("Error: Enumerate failed.");<br />
Console.WriteLine(" {0}", ex.Message);<br />
}<br />
Console.WriteLine("Success: Enumeration complete.");<br />
Console.ReadLine();<br />
}
This works great. I know it's possible to connect to a single group. I mean something like:
strPath = "LDAP://domainname/CN=Groupname,DC=domain***,DC=domain***";
When I execute the code he throws an exception saying:
"Object not found on server"
So i'm doning something wrong in the syntax-connection-string is guess.
This is the exact string I'm trying to use:
strPath = "LDAP://cu4it/CN=D_Company, CN=Users,DC=Cu4iT, DC=tld";
cu4it -> domainname
CN=D_Company -> The group I'm trying to connect to
CN=Users -> Don't know why, but find this in many examples
DC=Cu4iT, DC=tld -> retrieved from rootDSE.Properties ["configurationNamingContext"]
Can anyone tell me what I'm doing wrong here?
Thanks in advance!
|
|
|
|
|
Hi,
Can anyone show me how to change the balance of an audio line!? I need the same function like the windows volume control pannel does.
If I change the balance in my program, I want should see teh change in the volume control pannel too.
How can I do this!?
Thx for help...
Daniel
|
|
|
|
|
I have a DataGrid control which has some DataGridTableStyles. I want to bind an IList to one of these DataGridTableStyles without converting this IList to a table and assign the name of this table to the MappingName property of the DataGridTableStyle. How can I do?
Thanks!
ghghgj
|
|
|
|
|
Hi,
the MappingName of the table style has to be set to the class name of the list class assigned to the data source. I dont know if IList is sufficient. If not take myList.GetType().Name as the mapping name.
The column style's mapping names then have to be set to the names of the properties you wish to show.
|
|
|
|
|
could anyone plz kindly tell me how to select row from the datagrid and display them in Textboxes. so that i can edit them.
for eg;- datagrid has two column containing first name(John) and lastname(smith). i need to select them and display them in textbox 1 for displaying first name and 2 for displaying last name.
leo
Kathmandu, Nepal
|
|
|
|
|