Get return value from one class to another
-
Hi guys, I am a newbie in C# and I need your help please. I have 2 windows forms and I am trying to pass a value from one form to another, in my first form I have: m_nSessionId=551; SessionID(m_nSessionId); public long SessionID(long SID) { string test=SID.ToString(); MessageBox.Show(this, test);//This worked and did show me 551 return SID; } How do I get the SID value in my other class (Windows form) I tried this in my other class but keep getting a zero value. ProcessFile session=new ProcessFile(); session.SessionID(m_nSessionId); Please Help!!!!! sasa
-
Hi guys, I am a newbie in C# and I need your help please. I have 2 windows forms and I am trying to pass a value from one form to another, in my first form I have: m_nSessionId=551; SessionID(m_nSessionId); public long SessionID(long SID) { string test=SID.ToString(); MessageBox.Show(this, test);//This worked and did show me 551 return SID; } How do I get the SID value in my other class (Windows form) I tried this in my other class but keep getting a zero value. ProcessFile session=new ProcessFile(); session.SessionID(m_nSessionId); Please Help!!!!! sasa
SASA_1 wrote:
I have 2 windows forms
No you don't. You have two classes that derive from "Form". So the actual question is "how do you pass values from one class to another"? Since you are the author of the classes you can do that any way you want. Use properties or methods or events or a combination of them, it's up to you! Isn't that cool? :cool:
-
Hi guys, I am a newbie in C# and I need your help please. I have 2 windows forms and I am trying to pass a value from one form to another, in my first form I have: m_nSessionId=551; SessionID(m_nSessionId); public long SessionID(long SID) { string test=SID.ToString(); MessageBox.Show(this, test);//This worked and did show me 551 return SID; } How do I get the SID value in my other class (Windows form) I tried this in my other class but keep getting a zero value. ProcessFile session=new ProcessFile(); session.SessionID(m_nSessionId); Please Help!!!!! sasa
Easy would be, if the Form1 creates the Form2. Form1 code. private Form2 f2; //Constructorcode f2 = new Form2(); f2.Show(); Than you can set every public Method or Variable (public int m_nSessionId) from your Form1. this.f2.m_SessionId = 551; or this.f2.SessionID(551); All the best, Martin
-
Easy would be, if the Form1 creates the Form2. Form1 code. private Form2 f2; //Constructorcode f2 = new Form2(); f2.Show(); Than you can set every public Method or Variable (public int m_nSessionId) from your Form1. this.f2.m_SessionId = 551; or this.f2.SessionID(551); All the best, Martin
Thank you Martin for your reply. I tried what you suggested and no luck. Here is what I have after your suggestion: Form 1 m_nSessionId=processObj.SessionID; if(m_nSessionId!=-1) { string test=m_nSessionId.ToString(); MessageBox.Show(this,test);//This does show the value that I want ProcessReport report = new ProcessReport(); report.ShowDialog(); report.SessionId=m_nSessionId;//Your suggestion pnlProgress.Visible=false; } Form 2 When I try to output SessionId it shows 0 string test=SessionId.ToString(); MessageBox.Show(this,test); Please help!!! sasa
-
Thank you Martin for your reply. I tried what you suggested and no luck. Here is what I have after your suggestion: Form 1 m_nSessionId=processObj.SessionID; if(m_nSessionId!=-1) { string test=m_nSessionId.ToString(); MessageBox.Show(this,test);//This does show the value that I want ProcessReport report = new ProcessReport(); report.ShowDialog(); report.SessionId=m_nSessionId;//Your suggestion pnlProgress.Visible=false; } Form 2 When I try to output SessionId it shows 0 string test=SessionId.ToString(); MessageBox.Show(this,test); Please help!!! sasa
sasa,
ShowDialog
is a synchronous function, which means it will only return and execute code after it when the form is closed. Using this function to display the form is a good idea if you want to force the user to respond to that form before continuing manipulation of the main form. If you are using this function, however, you will need to set all your variables before you call that function, like this:report.SessionId = m_nSessionId;
report.ShowDialog();Your code which you have does it in the reverse order, which is why it does not work. Now Martin had suggested setting the variables after the call to the function called
Show
, which actually displays the form and returns immediately. His code works fine because the call toShow
returns immediately. Depending on whether you want the user to be able to manipulate both forms at the same time or whether you want to force the user to manipulate only the form you display until the user closes it, you can useShow
orShowDialog
. If you use the latter, you will need to set the variables before the call to that function. Hope that helps! Sincerely, Alexander Wiseman -
Thank you Martin for your reply. I tried what you suggested and no luck. Here is what I have after your suggestion: Form 1 m_nSessionId=processObj.SessionID; if(m_nSessionId!=-1) { string test=m_nSessionId.ToString(); MessageBox.Show(this,test);//This does show the value that I want ProcessReport report = new ProcessReport(); report.ShowDialog(); report.SessionId=m_nSessionId;//Your suggestion pnlProgress.Visible=false; } Form 2 When I try to output SessionId it shows 0 string test=SessionId.ToString(); MessageBox.Show(this,test); Please help!!! sasa
You didn't do what Martin suggested and so it fails because in this:
SASA_1 wrote:
Form 2 When I try to output SessionId it shows 0 string test=SessionId.ToString(); MessageBox.Show(this,test);
You're assuming that "SessionID" from Form 1 is global and it's not. What you're not entirely clear on is the architecture on how Form 1 and Form 2 are actually created. Do they both get created in Form 0 or does Form 2 get spawned from Form 1? How are they created? That will dictate how you pass the data between the two. Generally the easiest way is through the use of a public variable created at a level that makes it global. Mike Poz
-
sasa,
ShowDialog
is a synchronous function, which means it will only return and execute code after it when the form is closed. Using this function to display the form is a good idea if you want to force the user to respond to that form before continuing manipulation of the main form. If you are using this function, however, you will need to set all your variables before you call that function, like this:report.SessionId = m_nSessionId;
report.ShowDialog();Your code which you have does it in the reverse order, which is why it does not work. Now Martin had suggested setting the variables after the call to the function called
Show
, which actually displays the form and returns immediately. His code works fine because the call toShow
returns immediately. Depending on whether you want the user to be able to manipulate both forms at the same time or whether you want to force the user to manipulate only the form you display until the user closes it, you can useShow
orShowDialog
. If you use the latter, you will need to set the variables before the call to that function. Hope that helps! Sincerely, Alexander WisemanHi Alexander; Thank you for your suggestion, I learned something new today. But, my code still gives me a 0 value for m_nSessionId; when the variable has a value. In my Form 2, All I have is Public SessionId; and then I have a load function which manipulates data based on the m_nSessionId. With a value of 0 it doesn't do anything. Please help!! and please don't mind my ignorance. sasa
-
Hi Alexander; Thank you for your suggestion, I learned something new today. But, my code still gives me a 0 value for m_nSessionId; when the variable has a value. In my Form 2, All I have is Public SessionId; and then I have a load function which manipulates data based on the m_nSessionId. With a value of 0 it doesn't do anything. Please help!! and please don't mind my ignorance. sasa
Sorry I must have misunderstood something. When you say that you still have a value of 0 for
m_nSessionId
, where in the code do mean this? Inside any code of Form2, you should be accessingSessionId
, the public variable which you set equal tom_nSessionId
before you callShowDialog
. Inside the load function (which I presume is on Form2), you should be accessing theSessionId
variable, notm_nSessionId
, which I thought belonged to Form1. Could you clarify that, and maybe post the section of your Form2 loading code that tries to look at the session ID? Sincerely, Alexander Wiseman -
You didn't do what Martin suggested and so it fails because in this:
SASA_1 wrote:
Form 2 When I try to output SessionId it shows 0 string test=SessionId.ToString(); MessageBox.Show(this,test);
You're assuming that "SessionID" from Form 1 is global and it's not. What you're not entirely clear on is the architecture on how Form 1 and Form 2 are actually created. Do they both get created in Form 0 or does Form 2 get spawned from Form 1? How are they created? That will dictate how you pass the data between the two. Generally the easiest way is through the use of a public variable created at a level that makes it global. Mike Poz
Sorry to meddle! But why don't you use the events? Try this: 1)Create an EventArgs class. 2)A delegate. 3)An event of type your delegate. 4)Raise the event and pass the SessionId as the EventArgs Property. Read this article and contact me if you had any problem.:) EventArgs Class Sojaner!
-
Sorry I must have misunderstood something. When you say that you still have a value of 0 for
m_nSessionId
, where in the code do mean this? Inside any code of Form2, you should be accessingSessionId
, the public variable which you set equal tom_nSessionId
before you callShowDialog
. Inside the load function (which I presume is on Form2), you should be accessing theSessionId
variable, notm_nSessionId
, which I thought belonged to Form1. Could you clarify that, and maybe post the section of your Form2 loading code that tries to look at the session ID? Sincerely, Alexander WisemanHi Alexander; Thank you for helping me with this. Here is the code snippet: Form1. m_nSessionId=processObj.SessionID; if(m_nSessionId!=-1) { //string test=m_nSessionId.ToString(); //MessageBox.Show(this,test);//m_nSessiodId at this point is holding a value. ProcessReport report = new ProcessReport();//creating form2 object and assigning m_nSessiodId to public variable report.SessionId=m_nSessionId; report.ShowDialog(); } form 2 //creating SessionId variable public long SessionId; //Function in form 2 where I need the value of m_nSessionId from form1 private void LoadReport() try { if(SessionId!=-1) { cryShared.TableLogOnInfo tbLogInfo=null; CBResult rpt=new CBResult(); foreach ( cryEngine.Table tb in rpt.Database.Tables) { tbLogInfo=tb.LogOnInfo; tbLogInfo.ConnectionInfo.ServerName=m_sServer; tbLogInfo.ConnectionInfo.DatabaseName=m_sDBName; tbLogInfo.ConnectionInfo.UserID=m_sUserId; tbLogInfo.ConnectionInfo.Password=m_sPassword; tb.ApplyLogOnInfo(tbLogInfo); tb.Location="\"" + m_sDBName+".dbo.\"" + tb.Location.Substring(tb.Location.LastIndexOf(".")+1); } cryShared.ParameterValues pvs=new cryShared.ParameterValues(); cryShared.ParameterDiscreteValue pv=new cryShared.ParameterDiscreteValue(); pv.Value=SessionId; pvs.Add(pv); rpt.DataDefinition.ParameterFields["Ad_Parameter1"].ApplyCurrentValues(pvs); crystalReportViewer1.ReportSource=rpt; } } Thank you again for all your help. sasa
-
Hi Alexander; Thank you for helping me with this. Here is the code snippet: Form1. m_nSessionId=processObj.SessionID; if(m_nSessionId!=-1) { //string test=m_nSessionId.ToString(); //MessageBox.Show(this,test);//m_nSessiodId at this point is holding a value. ProcessReport report = new ProcessReport();//creating form2 object and assigning m_nSessiodId to public variable report.SessionId=m_nSessionId; report.ShowDialog(); } form 2 //creating SessionId variable public long SessionId; //Function in form 2 where I need the value of m_nSessionId from form1 private void LoadReport() try { if(SessionId!=-1) { cryShared.TableLogOnInfo tbLogInfo=null; CBResult rpt=new CBResult(); foreach ( cryEngine.Table tb in rpt.Database.Tables) { tbLogInfo=tb.LogOnInfo; tbLogInfo.ConnectionInfo.ServerName=m_sServer; tbLogInfo.ConnectionInfo.DatabaseName=m_sDBName; tbLogInfo.ConnectionInfo.UserID=m_sUserId; tbLogInfo.ConnectionInfo.Password=m_sPassword; tb.ApplyLogOnInfo(tbLogInfo); tb.Location="\"" + m_sDBName+".dbo.\"" + tb.Location.Substring(tb.Location.LastIndexOf(".")+1); } cryShared.ParameterValues pvs=new cryShared.ParameterValues(); cryShared.ParameterDiscreteValue pv=new cryShared.ParameterDiscreteValue(); pv.Value=SessionId; pvs.Add(pv); rpt.DataDefinition.ParameterFields["Ad_Parameter1"].ApplyCurrentValues(pvs); crystalReportViewer1.ReportSource=rpt; } } Thank you again for all your help. sasa
Well your code looks fine, so the only thing I can think of is that
LoadReport
is being called before you set the session ID - that is, it is being called from the constructor of form 2. If you are callingLoadReport
from the constructor of form 2, then SessionId will not have the proper value in it, because you are setting its value only after the constructor is finished. So the main question is: when are you calling LoadReport in Form2? If you are calling it in the constructor of Form2, then I recommend instead that you make an event handler for theForm.Load
event and in that, call the functionLoadReport
. Let me know if that gets you anywhere. Sincerely, Alexander Wiseman -
Well your code looks fine, so the only thing I can think of is that
LoadReport
is being called before you set the session ID - that is, it is being called from the constructor of form 2. If you are callingLoadReport
from the constructor of form 2, then SessionId will not have the proper value in it, because you are setting its value only after the constructor is finished. So the main question is: when are you calling LoadReport in Form2? If you are calling it in the constructor of Form2, then I recommend instead that you make an event handler for theForm.Load
event and in that, call the functionLoadReport
. Let me know if that gets you anywhere. Sincerely, Alexander Wiseman -
Thank you again. I am calling it from the constructor and with that said, I am sorry man but how do I create and event handler? Please give an example? Thanks again sasa -- modified at 22:33 Wednesday 28th June, 2006
-
Hi Alexander; I created an event handler and got it to work. Thank you man, I really really appreciate your help. You are my guru. sasa
Excellent! I'm glad it worked out for you. :cool: Sincerely, Alexander Wiseman