|
There's always almost an index. Even in a Hashtable (which, in itself, doesn't use indexes but buckets), you can get an index of a key or value at that time (changing the Hashtable may invalidate that if the number of buckets must be increased to handle the capacity, of course). Any IList implement defines IndexOf , which can help. That doesn't mean, of course, that it will work (you might get an NotSupportedException ), but every IList implementation I've ever worked with does define this method to do what it should.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I'm designing my first app in VS.NET using C#. I've created an outlook style toolbar down the side of my main form, and I want to change the content to the right of these buttons when the user clicks on the different buttons. I had it working fine with my toolbar buttons (which are custom and get deactivated every time I click on the design view) coded into Form1 but this is very cumbersome.
I want to use seperate UserControls for each of my content panels, and a seperate UserControl for my custom toolbar of buttons.
My problem is now one of referencing. I can't get my UserControl to tell Form1 to switch the visibility of my panels (change my panels).
This is how my main method gets the ball rolling:
static void Main()
{
Application.Run(new Form1());
}
So I don't know how to get ahold of an instance of my Form1 class so that my UserControls can say something like :
MyForm.SetVisiblePanel(panel_id);
Any suggestions?
also, what does the Form1_Load method do? VS seems to like to pop these methods in but they are empty.
|
|
|
|
|
You don't do anything in main. In your definition of Form1 , pass this (Form1 ) to the constructos of other controls or as properties. If those controls are children of that Form , cast the childrens' Parent properties to Form1 and access what you need to (so long as it's public or internal (public only within an assembly)).
It's all about keep references of objects assigned to variables and passing them as parameters. This is simple, straight-forward object-oriented programming.
What does Form1_Load do? If you look at your source code for Form1 , you'll see it's the event handler for the form's Load event. It was put there and is empty because you double-clicked the form at some point. VS.NET will automatically add an event handler for the default event when you double-click a control (like the Click event for a Button ). Visual Basic 6 was no different.
I recommend reading through some articles here and reading about the .NET Framework at http://msdn.microsoft.com/netframework[^]. Understanding these simple concepts is crucial to developing applications - not just coding programs.
There are also many examples of such applications that you're working on, such as A designable propertytree for VS.NET[^].
Abstraction also fits very nicely into such a model.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi every body
i want to ask:
how we can prevent the user from ending the process from the task manager?
the a second question is how we can make the service interactive with the desktop
i know that there is ServiceType calss but when i try to use it the service dos'nt interact with the desktop and here is the segment of the code which i wrote
..........
...........
private void InitializeComponent()
{
this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
//
// serviceProcessInstaller1
//
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalService;
this.serviceProcessInstaller1.Password = null;
this.serviceProcessInstaller1.Username = null;
//
// serviceInstaller1
//
this.st=System.ServiceProcess.ServiceType.InteractiveProcess;
this.serviceInstaller1.ServiceName = "Service2";
this.serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
//
// ProjectInstaller
//
this.Installers.AddRange(new System.Configuration.Install.Installer[] {
this.serviceProcessInstaller1,
this.serviceInstaller1,this.st });
..............
..............
note i install the service by setup project
with regards
|
|
|
|
|
Wail A.Salem wrote:
how we can prevent the user from ending the process from the task manager?
You can't. But you can respond to notification that a user is killing your process. Handle the Closing or Close event of your main form (the one you pass directly or indirectly to Application.Run ). If your code is not finished in a timely manner, your process will be killed. There are a few other ways as well, but I'll leave this as an exercise for you. I recommend reading through the Windows Management APIs section of the MSDN Online Library[^].
As for the second question, you have to write this to the registry yourself. So add a registry key HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\<YourServiceName>\Type such as 288 (256 for "Interact with desktop" OR'd with 32 for the service type), or whatever is appropriate for your service type so long as you perform a bitwise OR with 256 and run it as the LocalSystem (default). If you run it as a user, then the service can only interact with that user's desktop (assuming the user has an associated desktop session and can log in locally).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I've just started doing a bit of stuff with text and I can't seem to find anologs for GetTextExtentPoint32() and the like in the Graphics or Font classes. Any hints where that stuff is?
For example, I want to find the size of a string in a given font.
Matt Gerrans
|
|
|
|
|
MeasureCharacterRanges[^]
There is also a function MeasureString() which is a member of the Graphics class, it is overloaded to perform a number of different measurement types.
Hope that helps.
Gary
"A fellow with the inventiveness of Albert Einstein but with the attention span of Daffy Duck."
Tom Shales talking about Robin Williams
|
|
|
|
|
Yes, that looks like just the thing. Thanks!
Matt Gerrans
|
|
|
|
|
Hi,
How can i run an external program (some .EXE program) from my c# program, wait till this program ends, and then continue the c# program?
ideas?
|
|
|
|
|
Use the Process.WaitForExit method:
Process p = new Process();
p.StartInfo.FileName = "calc.exe";
p.Start();
p.WaitForExit();
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I'v replied to mav.northwind and your comments about the "lawsuite issue".
There is no malicious intent what so ever behind the creation of this application, i am just a 4th year IT student wanting to complete my project subject. And the results gained from this application is to create user profiles and to check what are the most frequent sites visited, search engines used and most common files downloaded.
I approached you because you have been answering my questions and helping me the most on the message forums. You've directed me to use BHO's
I would really appreciate it if you could help me with creating a BHO to log url's visited by user's and to log the files that they downloaded, thats all i want to use the BHO for.
Code or site references would be very much apppreciated...
After your response to my queries, i'v been struggling for two weeks to create a BHO ...
Any help would be very much appreciated ...
From a student in need
|
|
|
|
|
In what language? C#? Not exactly the best choice, but it's possible (albeit much slower due to marshaling). If you want resources, a quick search for "BHO" on MSDN[^] would turn up the article, Browser Helper Objects: The Browser the Way You Want It[^].
If you want to do this in C#, you have to declare the IObjectWithSite interface at the very least. It would help to interop the shdocvw.dll library using tlbimp.exe.
The basic concept is that you get the interface for the IWebBrowser (QueryInterface - or casting in .NET with COM interop), get the DWebBrowserEvents2 event interface (also interop'd if you're doing this in C#), and handle any number of events, like DownloadBegin . There's a number of events you could handle, and this will fire before downloading anything. Anything you see in a browser (web page, image, stylesheet, or other file to download) is actually downloaded to your machine. Several events will alert you when a download begins.
Start with the article, and again I recommend you do not use C#. Even though it JIT compiles to native code, there's still a lot of marshaling required once loaded and JIT compiled. Go native - it's much easier and you won't have to be declaring interfaces, structs, consts, and P/Invoking functions as needed.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Can somebody explain to me what COM ports are? Are they just the serial ports on my computer? Does it have something to do with COM? There's this program on my computer that says I have 5 COM ports... I can't really find any information, although I'm not sure what to search for...
Can somebody give me some info?
/\ |_ E X E GG
|
|
|
|
|
So far from what I have found - COM is a contraction of Communication and COM Port is just synonym for Serial Port.
Is that it? Just another word for serial port. oh.
Then why does one of my programs have a USB device listed as COM5?
/\ |_ E X E GG
|
|
|
|
|
Well I can tell you that yes, Serial Ports are COM ports.
I don't know if they are the only things listed as COM ports, I imagine that USB could also be listed as a COM port...
On my computer in Device Manager, my serial port is listed as a COM port and my USB port is listed separately as something else (this may not be the case for all computers).
Hope this helps..
Jae
{My Blog}
|
|
|
|
|
Cool, so I guess my ulitimate quetion is, how can I get all the available COM ports on my computer?
/\ |_ E X E GG
|
|
|
|
|
I am assuming you want to use C#. I recently wrote a serial port program using the wrapper class found at http://www.codeproject.com/dotnet/DotNetComPorts.asp. In the SerialComm class found at this link, there is a method called Available(string portName).
You can use this method in a for loop to iterate through a number of ports, say 32 of them, and check:
for(int i=0;i<32;i++) {<br />
if(p.Available("COM"+i.ToString())) {<br />
Console.WriteLine("I have port {0}",i.ToString());<br />
}<br />
}
Reading that article found at the link might help also.
Jae
{My Blog}
|
|
|
|
|
I want to create a CustomColumnHeader class to then use in conjuction with a ListView control. I want to be able to adjust the height of the ColumnHeader and for it to remain at the set height even when the ColumnHeader is moved. I also want to use the XP theme in my application, so the method of using the Win32 API as used in the article on creating a CustomListView with calls to the Win32 is out of the question as this inhibits use of the XP theme.
Where can I get information on the internal structure of the ColumnHeader class to enable me to write a control which inherits from ColumnHeader?
|
|
|
|
|
Actually, there is not ColumnHeader control. Like most controls in Windows Forms (in the BCL), the ListView and it's related classes and members encapsulate a Windows Common Control. In this case, the ListView encapsulates the List-View common control. If you want information about how to custom draw headers (and do anything else with the ListView that isn't exposed in the .NET BCL), read about the List-View Controls[^]. You must P/Invoke several native APIs and declare the structs and constants you need that are defined in C/C++ headers already (which C# can't use).
If you want information on custom theming, read the Visual Styles Reference[^], which requires that also P/Invoke a lot of native APIs.
In both cases, there are several articles that cover these topics in varying detail here on CodeProject. I suggest you try searching.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Anyone know where I can get my hands on some documentation for the PDF ActiveX Control?
|
|
|
|
|
I'm using the .NET compact framework, and I'm trying unsuccessfully to do a SQL update. My code is as follows:
SqlConnection myConnection = new SqlConnection("User ID=abc;Password=123;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=factory;Data Source=servername");
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.UpdateCommand = new SqlCommand("UPDATE sn_allocatedblocks SET ab_status = 'Warehouse' WHERE ab_schedule = '"+schedule+"' AND ab_schedline = '"+schedline+"'", myConnection);
myConnection.Close();
In the debugger, this code seems to work fine....it hits every line and goes through the function successfully. However, when I open up SQL Analyzer and check to see if it worked, nothing is changed. I'm positive that the user has permissions and that the query is correct, I just can't get it working in my program. I also tried using the ExecuteNonQuery method, but that always throws a SQLException:
SqlConnection myConnection = new SqlConnection("User ID=abc;Password=123;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=factory;Data Source=servername");
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.UpdateCommand = new SqlCommand("UPDATE sn_allocatedblocks SET ab_status = 'Production' WHERE ab_schedule = '"+schedule+"' AND ab_schedline = '"+schedline+"'", myConnection);
adapter.UpdateCommand.ExecuteNonQuery();
myConnection.Close();
|
|
|
|
|
Sorry about the smileys, those are semicolons followed by the letter 'p'.
|
|
|
|
|
You should really read the documentation for the SqlDataAdapter in the .NET Framework SDK. You're not using it right, and it's not even necessary here. A DataAdapter is for filling and updating DataSet s using the various command properties. All you're doing in the first example is assigning it. That won't do anything. Just don't use the SqlDataAdapter at all.
The bottom fragment is almost correct, except - again - the SqlDataAdapter isn't necesary. Just instantiate the SqlCommand , assign it to a variable, and execute it.
Since you didn't tell us what the exception was or what it said (always help), I'm betting it's because you're not using parameterized queries, and instead doing the old kludge of string concatenation. If that variable has a quote (either single or double), the SQL statement is invalid. Instead, the correct code - using ADO.NET how it's supposed to be used - is:
SqlConnection conn = new SqlConnection(...);
using (conn)
{
SqlCommand update = new SqlCommand("UPDATE sn_allocatedblocks " +
"SET ab_status = 'Production' WHERE ab_schedule = @schedule " +
"AND ab_schedline = @schedline", conn);
update.Parameters.Add("@schedule", SqlDbType.NVarChar, 20).Value = schedule;
update.Parameters.Add("@schedline", SqlDbType.Int).Value = schedline;
update.ExecuteNonQuery();
} The using block makes sure that even in case of error the connection is closed and disposed (important). Also dispose of objects who's classes implement IDisposable . Change the parameter types to whatever you want (not knowing what they were supposed to be, I just made them up). If that schedline variable and parameter is not a string or date/time type, do not use quotes (quoting a numeric value will result in error as well).
Using parameterized queries signficantly reduces the attack surface (I could easily provide values for your string variables that would terminate the SQL statement and clear-out your master table since you're not checking user input - never trust user input), eliminates the need to properly encode strings (due to single or double quotes screwing up the resultant SQL statement), and allows you to perform bulk updates, inserts, and deletes (since you instantiate the command and add parameter definitions only once; assign the parameters to variables; for each iteration of a loop, change the SqlParameter.Value property for each param and call ExecuteNonQuery ).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Does anyone know how to implement a zoom control? like the one in the PrintPreviewControl.
|
|
|
|
|
try it with the Graphics.ScaleTransform method
|
|
|
|
|