|
I hate programming.
I prefer work in country with a pain in my back
|
|
|
|
|
hi, ever since i put in a user control, my other buttons don't work why is this ?
The form opens with this user control then once the user clicks "start" it disappears (visible = false) and displays the game behind it, this is the delicate code...
for the Delicate for the useer control
void usrMenu1_ClickMenu(string Button)
{
switch (Button)
{
case "Start":
Gameplay = true;
usrMenu1.Visible= usrSettings1.Visible = false;
usrMenu1.Hide();
usrSettings1.Hide();
break;
case "Settings":
usrMenu1.Visible = false;
usrSettings1.Visible = true;
break;
}
}
This is the button control..
private void FrmGame_KeyDown(object sender, KeyEventArgs e)
{
if(Gameplay == true)
{
if (e.KeyCode == Keys.Up)
{
if (U == true)
{
Player.Direction = 1;
Player.Normal = new Bitmap("images\\playerup.png");
U = true;
R = true;
L = true;
D = false;
}
}
if (e.KeyCode == Keys.Right)
{
if (R == true)
{
Player.Normal = new Bitmap("images\\playerright.png");
Player.Direction = 3;
L = false;
R = true;
D = true;
U = true;
}
}
if (e.KeyCode == Keys.Down)
{
if (D == true)
{
Player.Normal = new Bitmap("images\\playerdown.png");
Player.Direction = 2;
R = true;
L = true;
U = false;
D = true;
}
}
if (e.KeyCode == Keys.Left)
{
if (L == true)
{
Player.Normal = new Bitmap("images\\playerleft.png");
Player.Direction = 4;
R = false;
L = true;
D = true;
U = true;
}
}
if (e.KeyCode == Keys.Up && e.KeyCode == Keys.Right)
{
if (R == true)
{
Player.Normal = new Bitmap("images\\playerright.png");
Player.Direction = 3;
L = false;
R = true;
D = true;
U = true;
}
}
if (e.KeyCode == Keys.Down && e.KeyCode == Keys.Right)
{
if (R == true)
{
Player.Normal = new Bitmap("images\\playerright.png");
Player.Direction = 3;
L = false;
R = true;
D = true;
U = true;
}
}
if (e.KeyCode == Keys.Up && e.KeyCode == Keys.Left)
{
if (L == true)
{
Player.Normal = new Bitmap("images\\playerleft.png");
Player.Direction = 4;
R = false;
L = true;
D = true;
U = true;
}
}
if (e.KeyCode == Keys.Down && e.KeyCode == Keys.Left)
{
if (L == true)
{
Player.Normal = new Bitmap("images\\playerleft.png");
Player.Direction = 4;
R = false;
L = true;
D = true;
U = true;
}
}
}
}
And this is the section of code relivent for you lot to the Setup Game code
protected void Setup_Game()
{
usrMenu1.ClickMenu += new ClickButtonDel(usrMenu1_ClickMenu);
}
|
|
|
|
|
Without looking in too much depth at that monolithic code, I think the first improvement you make should be to these lines:
if (e.KeyCode == Keys.Up && e.KeyCode == Keys.Right)
if (e.KeyCode == Keys.Down && e.KeyCode == Keys.Right)
if (e.KeyCode == Keys.Up && e.KeyCode == Keys.Left)
if (e.KeyCode == Keys.Down && e.KeyCode == Keys.Left)
Perhaps OR might work better than AND?
Real men don't use instructions. They are only the manufacturers opinion on how to put the thing together.
|
|
|
|
|
First of all, it would be good to know if this is Windows.Forms or WPF, becouse the possible solutions might be different.
I guess your usrMenu1 object is an instance of your user control. You have defined a new delegate for the ClickMenu event, so the target method receives an string. It is not strictily bad, the code compiles and works, but it is not the best practice. You should better follow the structure of all event delegates defined in .NET, I mean, the target method should receive two parameters, you know, (object sender, EventArgs e) , and if you need to pass some aditional data, you just have to extend EventArgs class subclassing it and adding what you need. The problem here might be in the code which raises the ClickMenu event, and you have not posted it here, or might be in the KeyDown event handler you have posted becouse there are several mistakes in it. That said, I would like to help you improve this code a little.
In this case, instead of a strange ClickMenu event which sends a string I would have defined two different events using the "standard" delegate EventHandler: one for Start button and another one for Settings button.
On the other hand, there is a huge optimization job you should do on your code. These composed conditions are always false, and the code of these if blocks do never execute:
if (e.KeyCode == Keys.Up && e.KeyCode == Keys.Right)
Considering this, you do not need the if blocks to set the values to the four bool variables you are using, these four lines would do the same:
U = e.KeyCode != Keys.Down;
D = e.KeyCode != Keys.Up;
L = e.KeyCode != Keys.Right;
R = e.KeyCode != Keys.Left;
So setting Player.Normal and Player.Direction properties might be done with a switch.
|
|
|
|
|
Well I'm new to programming using sockets. What i am trying to do is create a client/server model. The client will report into the server every so often, and the server will send back data telling the agent what to do. (Monitoring software).
The problem I am having is closing the socket on the server. I get errors like:
A blocking operation was interrupted by a call to WSACancelBlockingCall
For my code:
while (running)
{
try
{
Socket socket = this.listener.Accept();
if (socket != null)
{
Thread handleThread = new Thread(new ParameterizedThreadStart(HandleTheClient));
handleThread.Start(socket);
}
}
catch (Exception ex)
{
Logging.Log(ex.ToString());
}
}
Closing:
protected override void OnStop()
{
running = false;
if (listener != null)
{
listener.Shutdown(SocketShutdown.Both);
listener.Close();
}
}
Now I know the problem is with;
Socket socket = this.listener.Accept();
But how do I fix this? IS the only way to use AcceptAsync? IF you are wondering why I'm not using that then its because I haven't learned it yet. I need to read up on it first. So can I break this block somehow when the service is trying to stop so the service will stop without error or even stop?
|
|
|
|
|
Before calling the Accept method, you must first call the Listen method to listen for and queue incoming connection requests.
Have you tried it
Whatever,still now if you receive a SocketException,you can use the SocketException.ErrorCode property to obtain the specific error code. After getting code you can refer to the Windows Sockets version 2 API error code documentation in the MSDN library for a detailed description of the error.
I Hope it will work for you.
|
|
|
|
|
I didn't show all of my code.. sorry about that. I called the Listen for the WHILE statement. The problem is when doing it this way it blocks at the Accept() method. The way I have it works. I can accept connections and do what I want with the data (I'm sending / receiving serialized data). The problem is when someone goes and tries to stop the service.
That is when I try to call the Shutdown and Close method and thats when it hangs
I decided to use async sockets
modified on Saturday, November 6, 2010 12:48 PM
|
|
|
|
|
Just watching this VSTS 2008 Unit Testing 1 of 1 lets you know how to test methods that return something, my question here is how do you test methods in Visual Studio 2008 that don't return any value? For example:
private void BtnLoad_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Title = "Select one or more media files";
dlg.Multiselect = IsEnabled;
dlg.Filter = "Media files(*.mp3;*.wav;*.wma;*.avi;*.mp4;*.mpg;*.wmv)|*.mp3;*.wav;*.wma;*.avi;*.mp4;*.mpg;*.wmv|All files(*.*)|*.*";
Nullable<bool> result = dlg.ShowDialog();
if (result == true)
{
string[] files;
files = dlg.FileNames;
foreach (string file in files)
{
lstBxList.Items.Add(file);
}
}
}
|
|
|
|
|
You're trying to run an automated test on against a UI method. I may simply be a little old-school, but I typically don't write unit tests against UI methods because of the interaction required.
I wasn't, now I am, then I won't be anymore.
|
|
|
|
|
Your code is incorrectly written. This is a UI event handler and the code that you hav in it DOES return a value.
This dialog box code should be in its own method that returns a fully qualified path to the caller. It should NOT be sitting inside an event handler.
You also wouldn't run a unit test against a method that requires user interaction.
Another question. Why on earth would you use a nullable boolean to get the return value of a dialog box? It's either going to return true or false, never null. So, what's the point?
|
|
|
|
|
Right I see what your saying...First of all I should have pointed out that I am working with WPF hence use a nullable boolean to get the return value of a dialog box, the other way of calling a dialog box does not seem to work when developing a WPF based app. Secondly I used this as am example which I have to say after the response I got from fock was a bad example of which I was hoping fock would use it to illustrate how to test a method that does not return anything...Please bear in mind that I am a rooky,so if I say something that seems obvious to you, may not be the case with me...
|
|
|
|
|
Dave Kreskowiak wrote: Why on earth would you use a nullable boolean to get the return value of a dialog box? It's either going to return true or false, never null. So, what's the point?
Actually, it should return a DialogResult. The use of a bool condition would indicate that it's a WPF/SL dialog box, and this does return a nullable boolean condition.
|
|
|
|
|
I haven't done any WPF until very recently, and nothing on dialogs yet, so my ignorance is showing through there.
|
|
|
|
|
As defined that method can not be unit tested as it requires user input (to select the file). But as you want an example on how to test a method that doesn't return a value it can be refactored slightly as below.
To test a method that returns void you test for the change in system state that the method call is meant to impose. In this case the listbox should contain 2 items after the call, granted testing if items were added to a listbox is of dubious benefit but this is just for illustrative purposes.
private void BtnLoad_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Title = "Select one or more media files";
dlg.Multiselect = IsEnabled;
dlg.Filter = "Media files(*.mp3;*.wav;*.wma;*.avi;*.mp4;*.mpg;*.wmv)|*.mp3;*.wav;*.wma;*.avi;*.mp4;*.mpg;*.wmv|All files(*.*)|*.*";
Nullable<bool> result = dlg.ShowDialog();
if (result == true)
{
LoadFilesToListbox(dlg.FileNames);
}
}
public void LoadFilesToListbox(string[] files)
{
foreach (string file in files)
{
lstBxList.Items.Add(file);
}
}
[TestMethod]
public void TestLoadFilesToListbox()
{
LoadFilesToListbox(new string[] { "file1.txt", file2.dat" });
Assert.AreEqual(2, lstBxList.Items.Count);
}
|
|
|
|
|
I've got a COM object that has a memory leak. This normally wouldn't be an issue except that my program is a kiosk app so it's running continuously.
Using a different COM object is not an option. This is a standard visual COM object from a very large company. Rumor has it that the next version will fix the memory leak but the memory leak has been there for a long time so I'm not hopeful.
So my thought is to destroy the object after a certain amount of time so that the memory will be released and to recreate it. But I can't figure out how to destroy the object other than to close the window and reopen it.
Can anybody help?
Thanks.
Jeff.
|
|
|
|
|
Have a second, identical window behind it and then destroy it? It's a brute-force-and-ignorance approach, but it may work if you time it right.
Real men don't use instructions. They are only the manufacturers opinion on how to put the thing together.
|
|
|
|
|
Wrong forum, mate.
The funniest thing about this particular signature is that by the time you realise it doesn't say anything it's too late to stop reading it.
My latest tip/trick
Visit the Hindi forum here.
|
|
|
|
|
See Marshal.ReleaseComObject[^] method, but if the memory leak is consequence of a defective programming of the COM object, maybe this will not solve the problem and, maybe, nobody will be able to solve it except for the company which developed it.
|
|
|
|
|
I told you what to do the last time[^] you asked this. For the benefit of others, the component you're talking about is Flash, and I suggested that you need to use AppDomains to cope with this.
|
|
|
|
|
Hi all,
I'm not a all day programmer, but C#/.Net is nice to get little administration processes.
But nothing is good without good coding style...
I will create a class which gives solutions to use if someone is calling this method.
I.e. like (ImpLink, Internetwork).
Sample Pic
In my method I will give a way to select different switches by choise with this options.
I know only this possiblity via "summary, and params" to give options for Intellisense
|
|
|
|
|
I'm afraid your question is not quite clear....
The funniest thing about this particular signature is that by the time you realise it doesn't say anything it's too late to stop reading it.
My latest tip/trick
Visit the Hindi forum here.
|
|
|
|
|
What is your question
I know the language. I've read a book. - _Madmatt
|
|
|
|
|
Maybe you want to know how to make an enum[^]?
|
|
|
|
|
yes I think I'm walking a step forward.
I was creating an enum and read out the integer.
But how can I transfer enum values to a method ?
At the moment i use "int MessageType"
I will call the Method Loggerschema
i.e:
LoggerScheme(ex.ToString(),MessageType.Error);
public enum MessageType1{Information=1,Error,Warning};
public void LoggerScheme(string ex, int MessageType)
{
if(MessageType==1)
{
// This is a Information Message
// But I prefer to give Type "Information" instead 1
}
if(MessageType==2)
{
// This is a Error Message
// But I prefer to give Type "Error" instead 2
}
if(MessageType==3)
{
// This is a Warning Message
// But I prefer to give Type "Warning" instead 2
}
}
modified on Friday, November 5, 2010 10:53 AM
|
|
|
|
|
Use the name of the enum type, instead of int:
public void LoggerScheme(string ex, MessageType1 MessageType)
Edit
And don't cast it to int, it is not necessary:
if (MessageType == MessageType1.Information)
...
|
|
|
|