|
Hello,
You have to set the "Enabled" property before the user clicks the button.
If you want to make a validation on the/an event itselfe,
I would suggest inherit your own Button from System.Windows.Forms.Button.
Use a validation method which uses Flags or some other stuff.
Override OnMouseDown, which checks the validation method and calls the base method or not!
Not calling the base method of OnMouseDown, will prevent the click event from fireing!
See this code example:
public class SpecialButton : System.Windows.Forms.Button
{
public SpecialButton()
{
}
private bool flag1 = true;
public bool Flag1
{
get
{
return flag1;
}
set
{
if(value!=flag1)
flag1 = value;
}
}
private bool flag2 = true;
public bool Flag2
{
get
{
return flag2;
}
set
{
if(value!=flag2)
flag2 = value;
}
}
private bool ValidateClick()
{
return Flag1&&Flag2;
}
protected override void OnMouseDown(MouseEventArgs e)
{
if(ValidateClick())
{
base.OnMouseDown (e);
}
else
{
}
}
}
Hope it helps!
All the best,
Martin
|
|
|
|
|
Hi,
the way you do it, button2 is not disabled at all, since the 2-second period it is disabled
you also "stop the world" by holding off the GUI thread.
don't put Thread.Sleep() in an event handler, it stops the GUI, which you never want to
happen. Instead, disable button2 and organize something to re-enable the button later.
For instance launch a Windows.Forms.Timer; when that timer expires, re-enable button2.
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
hi
i was created a pdf help for my application and now want to by click a button show pdf file.
how can show a pdf file in C#?
tanks
|
|
|
|
|
Create Process and start the process by giving obsolute path of PDF file.
Process.Start ("x:\\sample.pdf");
Thanks
|
|
|
|
|
With the proper mention that you must have a PDF reader installed on your machine and it must be registered with the "pdf" extension.
|
|
|
|
|
Alternatively you can use a WebBrowser Control (so you can show PDF inside your app);
this too assumes you have a PDF reader installed.
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
hi Luc Pattyn
your suggestion was very interest for me.
tanks so much
|
|
|
|
|
Hi.
Since ".net reflector" can decompile the assembly which means that all of the source can be restored, does any one know how to avoid that? since i have encryption keys stored in the assembly and can by seen with the .net reflector?
This has been bothering me for a few month.
Thanks.
|
|
|
|
|
maybe obfuscator helps you...
VirtualVoid.NET
|
|
|
|
|
You can obfuscate the assembly. VS2005 includes a Dotfuscator Community Edition (light version).
Many other obfuscator tools exist with prices from a couple of hundred to several thousand USD. (See also this Google search[^].)
|
|
|
|
|
Use an obfuscator. Visual Studio comes with the free edition of Dotfuscator, which can rename the symbols in your application. However, in order to achieve a higher degree of protection you'll need more than that. The superior versions Dotfuscator and most similar products have something called string encryption, which will prevent decompilers from reading keys, passwords, etc that are stored as strings in your app.
There are a myriad of commercial obfuscators out there and some of them have sponsored articles here on CP. If you want to invest some money into this I recommend {smartassembly}(trial version available on their site). It's way way cheaper than Dotfuscator or Spices.Obfuscator and it's very easy to use. Also, VERY IMPORTANT: if you use features such as serialization, reflection or remoting in your app, you'll have to be very careful with those classes/methods because most obfuscators break the application if those sections of your code are not excluded from renaming. As far as I saw from the trial version, {smartassembly} does that automatically, so that's a big advatage.
But download some trials and see which one fits you.
|
|
|
|
|
As long as your program is able to extract the encryption keys, a hacker is able to do that, too. With or without an obfuscator.
-^-^-^-^-^-
no risk no funk ................... please vote ------>
|
|
|
|
|
Assume that i have A.dll.
Later, i create B.dll project that "using" A.dll.
when i build the project , the output are A.dll and B.dll.
Is it possible that the output is only B.dll(combines A.dll in it)?
How?
Thank =)
|
|
|
|
|
It is possible. Google for ILMerge.
|
|
|
|
|
Thank for your help, Mark =)
|
|
|
|
|
|
|
I've try t use HttpWebRequest and HttpWebResponse to download files,but the problem is the connection speed of the network.This is my example
Assume that i have 100 files name A1,A2,A3..A100 in the same url folder http://www.myweb.com/data/
when i try to download these file i must connect to
http://www.myweb.com/data/A1
http://www.myweb.com/data/A2
.
.
.
So it has 100 connections!!!.
It's not make sense why i have to open 100 connections to download file in the same url.
Could i make just 1 connection to http://www.myweb.com/data , start download 100 files and then quit the connection? if so,how?
Thank =)
|
|
|
|
|
I'm making a program that requires you to take the sound from a microphone, change it (all it really has to do is change the pitch a little), and play it through the speakers. So...
1. How can you get the sound data from the microphone
2. How can you change the pitch (without speeding it up)
3. How can you play this changed sound data through the speakers?
I haven't found any articles yet on CodeProject or Google. Any help here?
Hippophobia - Fear of horses. What?
|
|
|
|
|
I assume you want to use human speech, or you want arbitrary sounds?
For your second question, look at phrases like speech processg, and LPC, You need some intensive processing to extract the pich and recreate the voice signal. These methods do not work for sounds in general. I don't think you will find samples on code project, you can use. Maybe the Micrososft speech processing APIs will help. (Don't know how they are colled exactly SAPI maybe?)
Rudolf Heijink
|
|
|
|
|
Not sure what arbitrary sounds are, but... Yes, it's going to be human speech mostly, but really, just any sound... I'm taking a look at SAPI right now.
See, what I'm doing is taking the sound from the microphone, changing the pitch of the incoming sound, and then (immediately) playing the altered sound through the speakers. I was thinking I would start out by just playing the sound back normally through the speakers, without alterations, like a normal microphone hooked up to some speakers.
Then, I'm going to need to know how to change the pitch of the sound and play simultaneously with the normal voice. I know that to play two sounds at once you pretty much just average the sine wavs, but I'm not sure how you would change the pitch. I was thinking that you would just increase the frequency of the wave and then increase the repetitions (so that it wouldn't come out faster), but I'm not quite sure how to do that yet...
Also, I know how a .wav file works, so I could put the sound information into that, but I have no idea how I would play it through the speakers. Is there a way to change the position of that little thing inside the speaker (don't know what it's called, but it's the thing that moves back and forth to produce the sound) to the position that you specify?
I wish I could drive...
|
|
|
|
|
Hi.
My problem is the following. I have a class that contains a "MakeByteArray" function.
I have many objects of that class. Inside that function, I have a private variable,
that is NOT static. It seems that when I put all these objects in other objects, and
then into a list, and I iterate through every object, the PRIVATE variable that i use
in "MakeByteArray" is altered depending on what the value was in the previous object.
This makes no sense since the objects don't know about each other, and the variable is
not static.
In short, the following happnes:
Print contents of object 1; object 1 has private variable "priv_var" that is a short
and has a value of "X"; correct contents printed
Print contents of object 2; object 2 has private variable "priv_var" that is a short
and has a value of "Y"; incorrect contents printed; "Y" should have been printed, but,
"Y+X" was printed instead (note that "X" is the value of "priv_var" in object 1)
OR, if I reset priv_var to 0 at end of MakeByteArray() in object 1, then sometimes the value
(0) carries over to object 2's priv_var (when it shouldn't)
How do I know that object 2's "priv_var" got the value "Y+X" from object 1, and NOT from
somewhere else? I did tests. When object 1's value changed, so did object 2's. I tried
many different (short) values, and the results were the same. However, this doesn't
happen always. I know *when* it happens, but I don't know *why*.
I this summarizes my problem, however, if you want to see more
(very long), including code, scroll down.
Oh, forgot to mention, I am using Visual Studio 2005, Windows XP, on an intel machine.
I'd appreciate any help with this.
Thank you.
-----------------------------------------------------------------------------------------------
Before you start, I apologize in advance for the formatting (or lack of) of my code.
Now, my code. This is the code for the class whose objects are put into another object.
namespace ConsoleApplication1
{
public class MyPara : MyFormat
{
public static long totalSum = 0; // public for testing purposes
protected short rc;
public MyPara()
{
/*
various variables initialized here
*/
rc = 0;
}
/*
more constructors here; all of them do rc = 0;
multiple (irrelevant) functions here as well;
*/
public bool IncRc()
{
rc++;
}
public byte[] MakeByteArray()
{
short rc2 = rc;
totalSum = totalSum + rc2;
buffer = new byte[byteLength]; // byteLength is defined in a parent class
recordCount2 = IPAddress.HostToNetworkOrder((short)(rc << 4));
byte[] temp_ba = BitConverter.GetBytes(rc2);
if ((temp_ba[0] == 0x00) && (temp_ba[1] == 0x00)) // used to check if value of '0' is present
Console.WriteLine("bad!!!!!!!!"); // code never reaches this line
System.Buffer.BlockCopy(temp_h, 0, buffer, 0, 2);
/*
copy more stuff into buffer using System.Buffer.BlockCopy here;
when done copying, return buffer;
*/
// rc = 0; <--- when this line is included, totalSum is correct, but many objects then use this value instead of their own
return (buffer);
}
}
}
Before I go onto my next class... Why do I declare another variable (rc2) that I just give the
value of rc? It was for a test. The same thing happens if i use the variable "rc" and rc2",
the results I get are identical.
now, this following class is a class whose objects "contain" the objects of the above class
(MyPara):
namespace ConsoleApplication1
{
public class MyPage : MyPageFormat
{
protected static short page_number = 0;
private List<mypara> paras;
public MyPage()
{
/*
initializes a bunch of variables
*/
paras = new List<mypara>();
}
/*
more constructors go here; all of them do paras = new List<mypara>();
multiple (irrelevant) functions here as well
*/
public bool AddPara(MyPara mp) // returns true if paragraph was added successfully, false otherwise
{
if ((byteLength + mp.ByteLength) <= maxSize) // maxSize defined through constructor or parent class
{
paras.Add(mp);
byteLength = (short)(byteLength + mp.ByteLength); // byteLength defined in parent class
page_length = page_length + mp.ByteLength; // page_length defined in parent class
return (true);
}
else
return (false);
}
public override void WriteToStream(MemoryStream ms)
{
BinaryWriter bw = new BinaryWriter(ms);
/*
write a bunch of private variables;
ex: bw.Write(var_1); bw.Write(var_2); etc.
*/
for (short z = 0; z < paras.Count; z++)
bw.Write(paras[z].MakeByteArray());
ms.Position = 0;
}
}
}
This class basically contains objects that are of type MyPara. As you can see, we can either
write the paragraph to a byte array (using MyPara's MakeByteArray()) or we can write the
whole page to a stream (using MyPage's WriteToStream which calls each MyPara's MakeByteArray()).
Now, the class that does stuff with the above classes:
namespace ConsoleApplication1
{
public class ppTest
{
/*
constructors go here;
various other functions here as well;
*/
public void TestSchedulePP()
{
List<mypage> pages = new List<mypage>();
/*
code to 'fill' pages list goes here;
pages contain multiple 'paragraphs';
IMPORTANT: At this point, before putting paragraphs
into pages, each paragraph's private rc variable was
checked and it DID have the CORRECT value
*/
//pages are now 'filled' with 'paragraphs'
//write them to a file
ToFile<mypage>(pages);
}
public void ToFile<e>(List<e> pages) where E : MyPageFormat // MyPageFormat is parent class of MyPage listed above
{
byte[] barray;
FileStream fs = new FileStream("mypages.bin", FileMode.Append);
MemoryStream ms;
BinaryWriter bw = new BinaryWriter(sp);
for (int e = 0; e < pages.Count; e++)
{
ms = new MemoryStream();
pages[e].WriteToStream(ms);
barray = new byte[ms.Length];
ms.Read(barray, 0, barray.Length);
bw.Write(barray);
ms.Flush();
ms.Close();
barray = null;
}
bw.Close();
sp.Close();
}
}
}
The first function basically "fills" my list of pages, and then calls ToFile which prints the
contents of the list (all pages including all paragraphs).
Finally, my main program code:
ppTest pp = new ppTest();
pp.TestSchedulePP();
So, after all that, the flow looks like this:
Main program --> TestSchedulePP() in ppTest --> ToFile() in ppTest --> WriteToStream() in MyPage --> MakeByteArray() in MyPara
I have ensured that after I fill my pages, I NEVER call IncRc(). In other words, between each
WriteToStream() call (or each MakeByteArray() call), I DO NOT call IncRc at all. The last IncRc() call occurs BEFORE the pages are "filled" with paragraphs.
To reiterate my question, the problem value/variable is in MyPara. "rc" should NEVER have the value of the previous object, but sometimes, it does! I don't understand how a bunch of objects of MyPara that are in an object of MyPage can know about each other, and use each other's values.
So when I am going through the loop in MyPage (in WriteToStream()), I call each MyPara's MakeByteArray(), but why would one have the value of the previous one? For example, how can the rc var in paras[z].ToByteArray() have the same value as paras[z+1].ToByteArray() ??? I realise that if it happens that BOTH paragraphs had the same number of IncRc() calls, the rc value will be the same, but they don't. In fact, I check all the rc values (of each paragraph) before putting them in pages and they are ALL correct. So how does the rc value of object 1 get into the rc of object 2??????
Two things to add: I know "rc" is a 16-bit number and I am shifting it by 4 bits. I never increment rc past a 12-bit number (checked) so thats ok. Also, if you look at the last commented line in MakeByteArray() in MyPara, when it is uncommented the totalSum is correct, but many paragraphs have rc = 0 which should never happen. When the line is left commented, like in my example above, no paragraphs have rc = 0 (which is correct), but totalSum is wrong.
I am sorry that this was very long winded.
As I said above, I would appreciate any assistance with this problem.
Thank you.
-- modified at 12:02 Tuesday 11th September, 2007
|
|
|
|
|
I would like to know how to create a mp3 scratching program like dj's do with vinyl.
I'm using Visual C# 2005 with DirectX to write the program
I have an idea, like taking the buffer and flipping it back
and forth and changing the frequency speed according to the mouse.
Please help...
Thank You
-- modified at 18:55 Monday 10th September, 2007
|
|
|
|
|
Try look at the fmod [fmodex] library, i think it could be used in C# too.
Or use C++ to code stuff you want FMod have a lot of DSP effects aso; you can write plugins for it....
VirtualVoid.NET
|
|
|
|
|
Weird... unless I'm not understanding something about Regions.
I build an array of Region objects (constructed from GraphicsPath objects). When I access any array element (to set the Region property of a control), it works fine the first time, but if I try to access that same element a second time, it gives me an Invalid Parameter exception. It's as if the array is read-once.
I work around this by saving an array of RegionData objects, and constructing Regions on-the-fly from elements of this array. Clutzy at best.
Does anyone have any insight on what is going on? (Or what I'm doing wrong?)
Thanks!
Tom
-- modified at 17:36 Monday 10th September, 2007
|
|
|
|
|