|
Oh missed that. Is that quick launch or system tray where application should minimize to?
I think it should be system tray.
The word "politics" describes the process so well: "Poli" in Latin meaning "many" and "tics" meaning "bloodsucking creatures."
जय हिंद
|
|
|
|
|
Edited my response
|
|
|
|
|
Please tell me about the method "System.Type.InvokeMember" used in reflection with a sample peice of code showing its usage.
Neeraj Rawat
|
|
|
|
|
Have you read the documentation[^]. It includes both explanations and examples.
|
|
|
|
|
I have declared my form as a class member variable like this: public Settings setting; (the form i made was called Settings.cs) because i want to only be able to show it once. i am trying to open the form like this: setting.ShowDialog(); in a public, non static method.
whenever the method is run, i get the error in the title... what is i doing wrong?
setting is showing in the helper, autofill box thing as i type, as is showdialog...
thanks
sam
|
|
|
|
|
You don't create an instance anywhere. You could for example change the member declaration to:
public Settings setting = new Settings();
|
|
|
|
|
hmm ok, but that creates the form as soon as the app starts and waits for the showdialog, which i thought wasnt the best way of doing it, i only need the form every now and again... also, it gives an error if i try and open the form twice, to i need to use the "try...catch" thing?
theres alot more explanation in another thread of mine...
thanks
|
|
|
|
|
Yes that creates the form immediately. If you want, you can put the instantiation just before the ShowDialog line. Something like
settings = new Settings();
settings.ShowDialog();
...
|
|
|
|
|
already tried, this allows many forms to be created, i only want the one...
|
|
|
|
|
samskiter wrote: I have declared my form as a class member variable ... because i want to only be able to show it once
IMO that does not make sense. Now each of the methods in that class could show the Form over and over again.
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 Sunday, June 12, 2011 8:26 AM
|
|
|
|
|
its just the advise i got, have a look at my other thread...
|
|
|
|
|
Hi,
I did not read through that entire thread, probably the advice you got is correct, but the reason you mentioned does not fit.
My advice to you is make sure you understand why something does not work, and why the fix does work, don't just try different things until one of them works.
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 Sunday, June 12, 2011 8:26 AM
|
|
|
|
|
hmmm, well i didnt know u could use the "new" command outside of a method, i think i do understand the solution u gave now. is there any other way of making a new instance of the form only within my method, but that can only be opened once? at the minute all my method does is show the form, to me this seems to make the application more bloated (ie always having the form there, just showing and hiding it) i can tell its there cos the form itself has a notifyicon in it, and as soon as i start debugging it appears in the tray area.
|
|
|
|
|
You could make the form a Singleton (Google for it), so there's only ever one instance of it but it's not created until it's first needed.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
thanks, i had a look, seems like its just code to check if one already exists. and so i may aswell just put a check in my method that starts the form:
try
{
this.setting.Activate();
}
catch
{
this.setting = new Settings();
this.setting.Show();
}
i think i will stick with this code, i was just thinking there was some way of declaring/calling my form that would do this for me. thanks anyway guys
|
|
|
|
|
try / catch can get expensive... but if you're happy with it
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
lol fair enough... ill have a proper look through the singleton stuff later and have a go...
|
|
|
|
|
It's dead easy really.
public sealed class SingletonForm : Form
{
SingletonForm() { }
public static SingletonForm Instance
{
get { return Nested.instance; }
}
private class Nested
{
static Nested() { }
internal static readonly SingletonForm instance = new SingletonForm();
}
} Now when ever you need the form, just use SingletonForm.Instance followed by whatever property/method etc you want. It will always be the same form but it won't be instanciated until you first reference it, and it's thread safe.
Based on the samples (the last one) here[^].
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
ok brill,
that was pretty easy to use, fine with Show() but i get an error with ShowDialog(): "Form that is already visible cannot be displayed as a modal dialog box. Set the form's visible property to false before calling showDialog." id like to use showdialog as it lets me handle setting changes better when the form closes.
heres what i did in my form:
public partial class Settings : Form<br />
{<br />
public Settings()<br />
{<br />
InitializeComponent();<br />
}<br />
public static Settings Instance<br />
{<br />
get { return Nested.instance; }<br />
}<br />
private class Nested<br />
{<br />
static Nested() { }<br />
internal static readonly Settings instance = new Settings();<br />
}<br />
}
|
|
|
|
|
This works perfectly for me
public sealed partial class Settings : Form
{
private Settings()
{
InitializeComponent();
}
public static Settings Instance
{
get { return Nested.instance; }
}
private class Nested
{
static Nested() { }
internal static readonly Settings instance = new Settings();
}
} No problems with ShowDialog or anything else at all.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
weird it was only if i ran ShowDialog() twice that it did it BTW
heres the method:
public void COMMenuItem_Click(object sender, EventArgs e)
{
Settings.Instance.ShowDialog();
}
first time, it shows fine, but second time this is ran, i get the error.
this is supposed to work without a try...catch right?
|
|
|
|
|
Yeah, no need for try catch. I called Settings.Instance.ShowDialog(); twice in succession and it was no problem. ShowDialog returns with the form's visible state to false so it's not possible.
The only way that can happen is if the method that uses the ShowDialog is being called asynchronously from another thread, or if Show() has previously been used and the form wasn't closed, or the Settings form tries to show itself whilst already visible.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
im not too sure whats going on with it then.
the showdialog() is ran whenever i click a button in a right click menu of an icon... i think the event is allowed to be called even when the form is already there, so perhaps the problem is here:
ToolStripMenuItem COMMenuItem = new ToolStripMenuItem("COM Port", null, new EventHandler(COMMenuItem_Click));
|
|
|
|
|
samskiter wrote: is allowed to be called even when the form is already there
Yeah, that's your problem.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
so making a it a singleton wont work?
|
|
|
|