|
The .NET Framework base class libraries do not contain functionality for working with the non-client areas of a window frame (other than setting the caption, setting the border style, and showing or hiding the control, minimize, maximize, adn restore buttons). In order to do this, you have to go back to Win32 practices of handling notification messages, so Win32 programming experience will help.
You can find an old discussion of the process here: http://www.dotnet247.com/247reference/msgs/35/178321.aspx[^].
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
There are two alternatives to Heath's reply, but his suggestion is the best.
Alternative 1: Show absolutely none of the border area (there are properties in Windows Forms that you can use to hide them). Then, draw all the content you want on your own, putting normal buttons wherever you want them. The problem is that you must handle "hit testing" in order to let the user drag or resize the window, since Windows no longer does that work for you. There are several places to find information about that. Look to handle the WM_NCHITTEST message.
Alternative 2: Create a separate form that floats over your main window. It would contain only the button(s) that you desire, with no border or spacing. Once that window is created, you can manually position it to sit wherever you like. The problem is that the window is free-floating, so you need to reposition it every time your main form is moved or resized. This is the ugliest solution, since the users can see this button lagging while the rest of the window moves nicely.
John
"You said a whole sentence with no words in it, and I understood you!" -- my wife as she cries about slowly becoming a geek.
|
|
|
|
|
Anyone have a suggestion on how I can manipulate file permissions? I'm referring to what you find if you right-click a file and choose Properties, and then the Security tab. I'd like to programmatically set the groups and names, etc., but I'm not seeing a way to access this.
-- James --
|
|
|
|
|
Win32Security[^], produced by Microsoft, should be what you need.
--
Russell Morris
"So, broccoli, mother says you're good for me... but I'm afraid I'm no good for you!" - Stewy
|
|
|
|
|
Thanks Russell. That's the ticket.
-- James --
|
|
|
|
|
So far, I've been able to parse an XML file a couple different way. The problem I've encountered is that I am not able to find a C# code example how to modify or add data to an existing XML file.
Where can I find sample C# code to accomplish this?
|
|
|
|
|
You can load the document into an XmlDocument class (Load method) and then start adding XmlDocumentFragment's as children to the various XmlNode's inside the XmlDocument. Once you've got the document modified, then you could save it out using the Save method.
I, for one, do not think the problem was that the band was down. I think that the problem may have been that there was a Stonehenge monument on the stage that was in danger of being crushed by a dwarf.
-David St. Hubbins
|
|
|
|
|
Hello,
I'm trying to implement an e-mail validation program for a large mailing list, and I've run into a few problems.
So far, I have code that correctly checks all the syntaxes, and I have code that will check if an address is valid when it is given a list of mail exchanges, however, I can't get my code that actually retrieves the MX servers to work.
Does anyone have any code for MX lookup? I found the code I'm currently using at: http://groups.google.com/groups?selm=eMOLVL2WDHA.652%40tk2msftngp13.phx.gbl&oe=UTF-8&output=gplain
I can't tell if there is something wrong with the code or if I am just not using it correctly. Here is how I am trying to intialize the DnsLite class:
<br />
ArrayList mxRecords = new ArrayList();<br />
<br />
IPHostEntry IPhst = Dns.Resolve(hostname);<br />
<br />
DnsLib.DnsLite dnsStruct = new DnsLib.DnsLite();<br />
<br />
ArrayList dnsList = new ArrayList();<br />
for(int j = 0; j < IPhst.AddressList.Length; j++)<br />
{<br />
dnsList.Add(IPhst.AddressList[j].ToString());<br />
}<br />
<br />
dnsStruct.setDnsServers(dnsList);<br />
mxRecords = dnsStruct.getMXRecords(hostname);
This doesn't seem to be working correctly. Does anyone know if this code looks like it should work, or if there is better code examples of MX lookups anywhere that I look at.
Thanks, Blake
|
|
|
|
|
I just covered this the other day. You might try searching this forum. There's also an article here about an email validator for ASP.NET that uses Managed C++. It has MX code in there as well (which I mentioned in that previous thread), similar to the same code I used and posted here a while back. See A Managed C++ Email Validator Control for ASP.NET[^]. It's a good article, and the managed code can be translated to any .NET language you like if you truly understand the nature of the .NET Framework (syntax is different, classes, etc. are the same).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I have a client form that uses a remote object 'RemoteDataManager ' as follows:
RemoteDataManager r = new RemoteDataManager();
r.Test();
This works correctly, Test is executed like it should. However, this method takes a while to complete, so I'd like to make it a asynchronous call. So I tried:
RemoteDataManager r = new RemoteDataManager();
AsyncCallback RemoteCallback = new AsyncCallback(OurRemoteAsyncCallBack);
TestDelegate RemoteDel = new TestDelegate(r.Test);
IAsyncResult iar = RemoteDel.BeginInvoke(RemoteCallback, null);
This runs, but the Test method is never executed!
I don't know where to look for... does anyone have a clue?
Kind regards,
Ludwig
|
|
|
|
|
If you're using .NET 1.1 and catching exceptions, it's possible you might have the same problem discussed earlier here[^]. Stepping through your code in the debugger might shed some light on your problem, too, because from what little you provided all I can say is that your code looks fine.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi,
After two days I found out why it didn't work. Originally my config file contained:
<channels>
<channel ref="http">
</channels>
I changed it into:
<channels>
<channel ref="tcp">
</channels>
and all of a sudden the methods was also called asynchronously. I still don't know why, but it works now.
For your information, I wanted to use asynchronous calls because my remote method lasted 10 minutes to complete. I ran into another issue however, and I want to mention it here because it took me a while to find a solution. After 2 minutes or so, the thread was aborted on the server and my callback method was never called (the method was executed correctly though). So it worked, but I never got callback because the server thread ended. I solved this by dynamically increasing the script timeout that IIS uses:
System.Web.HttpContext.Current.Server.ScriptTimeout = 1800;
Now it works... but it was hard to find the solution
|
|
|
|
|
You realize that when you put the < and > characters into an HTML input field that they won't show up, right? Your XML for your .config file isn't visible. Please click "modify" on the bottom of your message and either escape these characters or click the "Do not treat <'s as HTML tags" check box right below the posting textarea. Note that any tags you use (like the <code> tag you put your last line between) will be escaped as well, so you'd best remove them.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
|
hi everyone,
i'm trying to create a small multiple choice quiz in a c# console application (within visual studio). has anyone done something similar and still has some of the code i could use to adapt to create mine?
thanks
|
|
|
|
|
Here is a simple one.
(doesn't do any error checking)
<br />
class Question<br />
{<br />
string name;<br />
ArrayList choices;<br />
<br />
public Question(string name)<br />
{<br />
choices = new ArrayList();<br />
}<br />
<br />
public string Name<br />
{<br />
get { return name; }<br />
}<br />
<br />
pubic ArrayList Choices<br />
{<br />
get { return choices; }<br />
}<br />
}<br />
<br />
class Quiz<br />
{<br />
static void Main() <br />
{<br />
ArrayList questions = new ArrayList();<br />
Question q = new Question("What is your age?");<br />
q.Choices.Add("1-15");<br />
q.Choices.Add("16-50");<br />
q.Choices.Add("51-100");<br />
questions.Add(q);<br />
<br />
q = new Question("What is your sex?");<br />
q.Choices.Add("Male");<br />
q.Choices.Add("Female");<br />
<br />
foreach (Question qq in questions)<br />
{ <br />
Console.WriteLine(qq.Name);<br />
int pos=1;<br />
foreach (string choice in qq.Choices)<br />
{<br />
Console.WriteLine(pos.ToString() + ":" + choice);<br />
pos++;<br />
}<br />
<br />
string answer = Console.ReadLine();<br />
int answerNum = Int32.Parse(answer);<br />
<br />
Console.WriteLine("Your answer is: " + (string)qq.Choices[answerNum]);<br />
<br />
}<br />
}<br />
}<br />
|
|
|
|
|
I followed your posts where you were looking for help with the C# code and this post on what you are trying to do.
First: you may find that your application is faster to develop and definitely much easier to use if you did it as a WindowsForm client or as a Web Client.
Second: you would want to write your application with the questions, multiple choices and the correct answer externalized. This way you can change questions, make question selection random, etc. without having to rewrite or rebuild your application.
Finally: present the data one question at a time with any other bells you want on your app.
So create a form and add a GroupBox to it from the tool box.
Decide the maximum number of choices (4?) then add that many radio button controls to the group box.
Above the group box put a label which will display the question.
Use the property pages to name everything.
Right click your project and Add New Item... and add a class named QuestionGetter.
In the class you will have the constructor code
public QuestionGetter()
{
}
In there you would establish your internal list of questions and choices. You may want to have an internal pattern to match your correct answers -- that way you calculate correct answers instead of having the correct answer laying around.
Then you need to add a button below the group box labelled Next and probably one for Exit.
In the Next button code
int i = 0;
foreach (RadioButton item in myGroupBox.Controls)
{
if (item.Checked == true) //user chose this answer
{
... calculate correct answer value
correctAnswer = recordNumber/4+1; //don't use this...too easy to break pattern
if (i == correctAnswer)
correct++;
else
wrong++;
break;
}
}
...read next question
if (GetQuestion()) // method returns true if all questions processed
{
string msg = String.Format("You got {0} answers correct.", correct);
string msg += correct>75?" You passed the exame.": " You failed.";
MessageBox.Show(this, msg);
Application.End();
}
question.Text = current.Question;
int i=0;
foreach (RadioButton item in myGroupBox.Controls)
{
item.Text = current.Choice[i];
item.Checked = false;
}
return;
_____________________________________________
Of all the senses I could possibly lose, It is most often the one called 'common' that gets lost.
|
|
|
|
|
My application uses sharpziplib to compress a directory, the system sits in the system tray awaiting another use.
If the applicaiton is restarted, no problems.
If the application is not shutdown and restarted, the application will double up on all of the files.
I have tried to debug this and found that most or all of the variables used in the creation of the ZIP file and reset.
Is there any other way to clear out the memory used and a funtion is performed ?
|
|
|
|
|
OK, I am an official dumb@$$.
This had nothing todo with sharpziplib, I had an arraylist that was not getting cleared.
Although it took me all day, problem solved.
Thanks anyway if you were gonna try and help me out.
|
|
|
|
|
In the future, if you believe a certain problem is with a product, you'd be better off asking in their forums (if possible). You can find more targetted advice and help with a particular product that way.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I have figured out how to open a JPG file and then resize it. However, I cannot find out how to save the resized image to a different File.
Can someone give me an idea where to start? (I'm using C#)
Mr Mike
|
|
|
|
|
Image.Save() method.
Mazy
You're face to face,
With the man who sold the world - David Bowie
|
|
|
|
|
I've donwloaded the cool CheckBoxItem control discussed here:
http://www.codeproject.com/aspnet/DataGridCheckBox.asp
It works fine when I bind to a DataTable, but when I bind to one of my custom objects (A collection of type ProcessMap), which has a boolean property of Exists, I get the error: "Specified cast is not valid"
I tracked it to this line in the CheckBoxItem:
<br />
string data = ((DataRowView) container.DataItem)[dataField].ToString();<br />
Basicaly it is expecting a DataRow to bind to. I know that the usual datagrid columns can bind to a custom object, no matter what it is. Anybody have any idea how to do this?
Thanks eveyone!
Also, when I figure it out, how do I re-submit the code? Just email him a new version?
|
|
|
|
|
The easiest way is to use the TypeDescriptor to get the properties and bind against the collection.
If want specific details of how the DataGridTextBoxColumn and DataGridBoolColumn work, you can use ildasm.exe (the IL Disassembler) that comes with .NET and view the IL (helps to understand Intermediate Language that is contained in assemblies), or use a good decompiler like .NET Reflector[^] to view the decompiled code (it's alright, but not always exact).
There's always good tips and tricks that the .NET developers use that can be handy to know.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Excuse my ignorance, i'm quite a novice to programming
my problem is i can't get my program to find the appropriate window handle for it to hide/minimize when the game is in fullscreen.... it will do it fine in windowed mode (i use process.mainWindowHandle property), but after i fullscreen it (Even if i go back) it won't find the right handle again...
i've seen pieces of code using the FindWindow(string window class, string window name) method from the Windows API (user32.dll) but it will return something well out of the bounds of a window handle (way out of the bounds of an integer :p )
so i made a class that is derived from a process.. i added a method called ToggleState()
(note, hWND is also set to "this.MainWindowHandle" in the constructor of the class)
<br />
public void ToggleState()<br />
{<br />
<br />
if ( IsWindowVisible(hWND) != 0 )<br />
{<br />
this.hWND = (int) this.MainWindowHandle;<br />
ShowWindow(this.hWND, SW_HIDE );<br />
}<br />
<br />
else if ( IsWindowVisible(hWND ) == 0 )<br />
{<br />
ShowWindow(hWND, SW_RESTORE );<br />
SetForegroundWindow(hWND);<br />
}<br />
}<br />
In summary: if i launch the game in windowed mode, it will work indefinately, but then if i fullscreen it (or start in fullscreen) it will cease to function (even if i go back to windowed)
i've tried other alternatives, like creating a new process object and doing GetProcessByName and then getting the main handle of THAT (still no luck)
Thanks for your time anybody who reads this
|
|
|
|