|
Im creating multiple buttons based on artists from a database. i am creating the buttons perfectly but have a problem assigning click events to individual buttons. I want to be able to click a button and open another form with the info and songs from the artist that was on that particular button.
I am an amateur programmer(lol), so dont ride me too bad if the solution is painfully obvious.
public partial class frmSearchArtists : Form
{
OleDbConnection musLibConn = new OleDbConnection();
utility util = new utility();
string artist;
int i = 0;
public frmSearchArtists()
{
InitializeComponent();
musLibConn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\GeneSys\Library.mdb";
musLibConn.Open();
OleDbCommand selLib = new OleDbCommand("SELECT DISTINCT Artist FROM Library ORDER BY Artist", musLibConn);
OleDbDataReader drLib = selLib.ExecuteReader();
int idxArtist = drLib.GetOrdinal("Artist");
Button btn;
while(drLib.Read())
{
btn = new Button();
btn.Text = drLib.GetValue(idxArtist).ToString();
artist = drLib.GetValue(idxArtist).ToString();
btn.Name = artist;
btn.ForeColor = Color.White;
btn.Size = new System.Drawing.Size(120, 60);
btn.BackColor = Color.MidnightBlue;
btn.Font = new Font("Arial Black", 10, FontStyle.Bold);
btn.Click += new System.EventHandler(this.btnArtist_click);
flp.Controls.Add(btn);
i++;
}
}
private void btnArtist_click(object sender, EventArgs e)
{
util.setArtist(artist);
frmArtist frmArtist = new frmArtist();
frmArtist.Show();
}
}
Any ideas or just suggestions to make existing code better?
|
|
|
|
|
Jon Henry wrote: I want to be able to click a button and open another form with the info and songs from the artist that was on that particular button.
Use the sender parameter to identify the button which is clicked. Use the Tag[^] property in button to keep you custom information about that button. You can access it like the below in button handler,
private void btnArtist_click(object sender, EventArgs e)
{
Button clickedButton = sender as Button;
string artist = (string)clickedButton.Tag;
.....
} You set tag like
while(drLib.Read())
{
Button btn = new Button();
btn.Tag = drLib.GetValue(idxArtist).ToString();
}
|
|
|
|
|
Outstanding! Thank you Navaneeth, it works perfectly.
|
|
|
|
|
Does anyone know where there is information on C# programming of the Media Center Remote to work with the axmediaplayer.
|
|
|
|
|
Hi,
I have DateTime objects that are all GMT+0 times. I'd like to display them in my program so that it matches system's timezone.
For instance, the DateTime "2009-03-14 16:00:00" would be ouput as a string as "2009-03-14 17:00:00 (GMT+1)" if my system timezone is set to GMT+1.
How can I do this? DateTime.ToString MSDN doc doesn't help; I'm not sure if there's an easy way to do this :/
|
|
|
|
|
You need to use the locale classes to work out what the timezone is, then build your own string that shows this information.
http://msdn.microsoft.com/en-us/library/system.datetimeoffset.aspx[^] is one option, the other is to convert the time to UTC, and then work out the difference.
Christian Graus
Driven to the arms of OSX by Vista.
|
|
|
|
|
Here is the unmanged definition:
//============================================================================
// DcamCapture()
// Start to acquire one image from the camera.
// ---------------------------------------------------------------------------
// [Argument]
// pImageBuff : /O: Specify the start address in the buffer where image
// data is to be stored.
// nBuffSize :I/ : Specify the buffer size (number of bytes).
// [Return values]
// If the function succeeds the return value is TRUE (1).
// If the function fails the return value is FALSE (0).
// To obtain detailed error information, use the DcamGetLastError function.
// [Note]
// 1. This function issues an instruction to start image acquisition.
// Since image acquisition is not complete even when this function ends,
// use the DcamWait function to check whether image acquisition is complete.
// 2. The necessary buffer size can be obtained with the DcamGetFrameBytes function.
//============================================================================
_DCAMLIBEXPORT BOOL _DCAMLIBSTDCALL DcamCapture( LPVOID pImageBuff, INT nBuffSize );
Here is my C# code which does not work:
class DCamLIB
{
private IntPtr ImageBuffer;
public DCamLIB()
{
ImageBuffer = new IntPtr( 0 );
}
[DllImport( "DCamLIB.dll" )]
private static extern bool DcamCapture( out IntPtr imageBuffer, Int32 bufferSize );
public void Capture( Int32 bufferSize )
{
if ( !DcamCapture( out ImageBuffer, bufferSize ) )
{
throw new DCamLIBException( this );
}
}
}
No matter what ImageBuffer = 0.
Ideas?
|
|
|
|
|
Hi Jason,
I doubt the first parameter is an output parameter.
To me LPVOID is the same as "void* ", i.e. pointer to something however I will not tell you what.
So it expects the address of an existing buffer, which is quite good actually, that way you can have the managed world allocate a buffer, pass it to the native camera code to get it filled, then use its content in the managed world.
There are basically two ways to allocate a buffer and pass its address:
1. using the fixed keyword
2. using the GCHandle class (get a handle, get a pointer, use, release)
1. is easier, 2. has more functionality (which one would need if the pointer needs to remain valid after the native function returns, e.g. when doing asynchronous stuff).
So I suggest you read up on "fixed" and drop the "out" from your native function's prototype.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
modified on Saturday, March 14, 2009 12:44 PM
|
|
|
|
|
So...
[DllImport( "DCamLIB.dll" )]
private unsafe static extern bool DcamCapture( int* imageBuffer, Int32 bufferSize );
public unsafe void Capture( Int32 bufferSize )
{
fixed ( int* ImageBuffer = new int[ bufferSize ] )
{
if ( !DcamCaptureReverseX( ImageBuffer, bufferSize ) )
{
throw new DCamLIBException( this );
}
}
}
If I needed to save the image to disk I would need to do so inside the fixed statement?
I need to do this so the garbage collector is not relocating a movable variable? The variable is essentially "pinned" during the fixed statement?
|
|
|
|
|
Hi,
1.
yes "fixed" is one way to pin down something, for as long as you are inside its code block.
2.
it is strange to see a Capture() method without any outputs. You should either provide a "string filename" parameter if you want it to save to disk, or return something "... int[] Capture(...)" if you want your app to work on it.
I would suggest something along these lines (note the use of "code block" button resulting in PRE tags which gives a monospaced font and preserves formatting):
public unsafe int[] Capture( Int32 bufferSize ) {
int[] buf = new int[ bufferSize ];
fixed ( int* ImageBuffer = buf ) {
if ( !DcamCaptureReverseX( ImageBuffer, bufferSize ) ) throw new DCamLIBException( this );
}
return buf;
}
3.
Once the native world is done with your buffer, it does not need the pinning; and the managed code can operate on it without restrictions, e.g. save it to disk.
4.
remarks:
- it is unusual, and probably not so good, to have exceptions without a string argument, passing some message in.
- there would be no need to zero out the buffer, managed arrays are always zero-filled automatically upon creation; the CLR designers have chosen to do so, in order to eliminate random behavior when you forget to fill it up and start using whatever happens to be there.
5.
are you sure int[] is right? that indicates 32 bit per pixel; would be fine for color images, and probably overkill (and memory waste) for grayscale. Some native C/C++ systems have 16-bit int, in managed languages int is 32-bit.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
[DllImport( "DCamLIB.dll" )]
private unsafe static extern bool DcamCapture( int* imageBuffer, Int32 bufferSize );
public unsafe void CaptureReverseX( Int32 bufferSize )
{
fixed ( int* buf = new int[ bufferSize ] )
{
if ( !DcamCapture( buf, bufferSize ) )
{
throw new DCamLIBException( this );
}
}
}
I am consuming an existing unmanaged 3rd party dll. I have the doc on it, I have all other functions implemented and working except for this one.
The following is the complete example code:
void CC9266SmpDlg::OnBtnCapture()
{
DWORD dwRetStatus = DCAM_WAITSTATUS_UNCOMPLETED;
WORD* pDataBuff = NULL;
int nWidth, nHeight, nImageSize;
nWidth = nHeight = nImageSize = 0;
DcamInitialize();
DcamOpen();
DcamSetDriveMode( DCAM_CCDDRVMODE_OPERATION, 3000 );
DcamSetGain( 1 );
DcamSetOffset( 10 );
DcamSetBinning( DCAM_BINNING_1X1 );
DcamSetCCDType( DCAM_CCD_TYPE0 );
DcamSetTriggerPolarity( DCAM_TRIGPOL_NEGATIVE );
DcamSetTriggerMode( DCAM_TRIGMODE_EXT_LEVEL1 );
DcamGetImageSize( &nWidth, &nHeight );
nImageSize = nWidth * nHeight;
pDataBuff = new WORD[ nImageSize ];
if( pDataBuff != NULL )
{
memset( pDataBuff, '\0', nImageSize );
DcamCaptureReverseX( pDataBuff, nImageSize * 2 );
while( TRUE )
{
DcamWait( &dwRetStatus, 0 );
if( dwRetStatus == DCAM_WAITSTATUS_COMPLETED )
{
break;
}
}
}
else
{
DcamClose();
DcamUninitialize();
return ;
}
DcamImgTiffSave( "c9266.tif", pDataBuff, nWidth, nHeight, 16, 12 );
delete [] pDataBuff;
DcamStop();
DcamClose();
DcamUninitialize();
}
|
|
|
|
|
Hi Jason,
The C demo code is interesting, here are some facts:
1. the image buffer needs to be allocated by the caller of the library, we got that right.
2. DcamGetImageSize is used to obtain the image sizes in pixels, and nImageSize is counting pixels, not bytes.
3. the demo code shows a big wait loop polling with DcamWait, so DcamCaptureReverseX is only starting the image capture, not waiting for it to get integrated, scanned, converted and presented in the array, hence the buffer is still untouched at that point in time.
and one strong suspicion:
1. Not sure what the second parameter of DcamCaptureReverseX is meant to be, they have 2*nImageSize, so that probably means size of the buffer in bytes, where each pixel takes 2 bytes (that fits the fact they have a WORD array, WORD=16-bit; however it is in contradiction with the memset where they clear only one byte per pixel); and your C# code does not match up, since you don't have the 2* at all.
my suggestions:
1. I would switch from int pixels to ushort pixels, allowing for 16-bit unsigned values. I now think your camera is a grayscale CCD with at best 16 bits of resolution. If less than 16 bits, the unsigned wouldn't matter at all. Don't forget the factor 2 in the DcamCaptureReverseX call.
2. you need to include a wait scheme; it needs to be inside the fixed block, since the buffer should not be unpinned for as long as the library is using it or going to use it.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
I got it working, needed to change a setting - set the trigger mode to internal. Using fixed worked great.
Thank you!
|
|
|
|
|
Well done.
BTW: I did not get an email notification this time, because you replied to one of your own messages...
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
I forgot the example C code:
int nImageSize = nWidth * nHeight;
WORD* pDataBuff = new WORD[ nImageSize ];
if( pDataBuff != NULL )
{
memset( pDataBuff, '\0', nImageSize );
// Acquire the image data
DcamCapture( pDataBuff, nImageSize * 2 );
}
|
|
|
|
|
I don't know why all the LinkButton in my C#.net website cann't work,
It means that if i clicked the button just like i have nothing to do with it.
Can someone help me?waiting online
the browser has not any problem.
modified on Saturday, March 14, 2009 12:09 PM
|
|
|
|
|
what browser you're using...? BTW you should ask this in asp forum
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L
%^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2
W_AD`EPABIKRDFVS)EVLQK)JKSQXUFYK[M`UKs*$GwU#(QDXBER@CBN%
Rs0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
--------------------------------------------------------
128 bit encrypted signature, crack if you can
|
|
|
|
|
Hi!
Have you tried setting AutoPOstBAck property
Thanks!
Develop2Program & Program2Develop
|
|
|
|
|
I want to execute a CLASS in C#.NET 2.0 Console Application
I don't want to use Main() in the Program
How to Achive this I try the following code but it won't works
using System;
class StaticTest
{
static StaticTest()
{
Console.WriteLine("Hello!");
}
}
I know that there MUST be SOME WAY by which we can CREATE such a CLASS in C#.NET 2.0
BUT I don't Understand that HOW????????????????
THANKS in ADVANCE .....
With due respect to all those who replied me.
SIR I am not asking about creating Library or I don't want to make the object of this class at any other class Inside Main(),Simply I don't wanna use Main().
Actually this is not just a question its a Challange for me I am Searching over it and I hope that I will definately Found Some Satisfactory answer
If you could Help me than Please Help Me.
Bcoz I simply belive that-
"A TRUE Programmer can Code whatever he THINKS there is Nothing impossible for a TRUE Programmer"
modified on Saturday, March 14, 2009 2:58 PM
|
|
|
|
|
You MUST have at least one Main method in your application to act as an entry point.
If you have more than one Main method in your application, you can specify the startup object from the project's properties. But it's not the case here.
[Edit]Xmen is correct. I was talking about executables. I forgot about libraries.[/Edit]
The method you have here is a static constructor, a method that will be called only the first time you use that class in any way.
You can create objects from that class normally just like any other classes.
static void Main(string[] args)
{
StaticTest s1 = new StaticTest();
StaticTest s2 = new StaticTest();
StaticTest s3 = new StaticTest();
}
Eslam Afifi
modified on Saturday, March 14, 2009 12:09 PM
|
|
|
|
|
Set project Output Type to Class Library, then you wont need Main
TVMU^P[[IGIOQHG^JSH`A#@`RFJ\c^JPL>;"[,*/|+&WLEZGc`AFXc!L
%^]*IRXD#@GKCQ`R\^SF_WcHbORY87֦ʻ6ϣN8ȤBcRAV\Z^&SU~%CSWQ@#2
W_AD`EPABIKRDFVS)EVLQK)JKSQXUFYK[M`UKs*$GwU#(QDXBER@CBN%
Rs0~53%eYrd8mt^7Z6]iTF+(EWfJ9zaK-iTV.C\y<pjxsg-b$f4ia>
--------------------------------------------------------
128 bit encrypted signature, crack if you can
|
|
|
|
|
Xmen is right, but, of course, your code will not then execute, it will need to be imported into a project that DOES have a main method, which then will create instances of these classes and call them. There is no way to get C# code to execute without a static void main method, somewhere, unless it is in a class library that uses COM and thus can be loaded by a C++ app ( which would have an int main method ).
Christian Graus
Driven to the arms of OSX by Vista.
|
|
|
|
|
Simple, write a compiler that uses a different name.
|
|
|
|
|
Hi,
I have the client and Udp server communicate with each other.Now im not getting the exception "The existing connection was forcibly closed by the remote host".This is because i have defined the server in a separate project.
The client is now able to communicate with 1 server at one ip and port.But i want the client to call another udp server at another port but same ip.For eg:the client is communicating with udp server at port 10001.After every 15 secs the client should connect with the servers at different ports(10002,10003 etc)
How i can do this?Please give me your suggestions
|
|
|
|
|
Hi,
what could be the problem? duplicate what you already have. And if there are any blocking calls, consider using an extra thread/backgroundworker.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|