|
I realy think its not so difficult.
1)
the main form gets all the instances.
2) you start with an default form1 in the panel.
3) all your form classes (Better to make a YourBaseForm) need an public Method
public virtual bool ReadyToChange() //You can override it in your specific form classes
{
if(//everything is ok == true)
{return true;}
else
{return false;}
}
4) the main form has an additional YourBaseForm instance, which is called actform.
5) at startup actform = form1
6) at the Click Events you just have to check:
if(actform.ReadyToChange)
{
formx.Show();
actform.Hide();
actform = formx;
}
else
{
//Message: Its not possible to change form.
}
Hope I got it now
All the best and good luck,
Martin
-- modified at 16:55 Thursday 29th June, 2006
|
|
|
|
|
I hope I got it right!
// UserControlX
public class X : UserControl
{
private X _instance;
private Y _y;
//Constructor
public X()
{
_y = Y.GetInstance();
_y.YChanged+= new event(_yChanged);
}
public event EventHandler XChanged;
private void _yChanged(object sender, event e)
{
//#3
MethodEnd();
}
public static X GetInstance()
{
if(_instance==null)
{
_instance = new X();
}
return _instance;
}
private void MethodStart()
{
//#1
//Here it starts
if(XChanged!=null)
{
XChanged(this, EventArgs.Empty);
}
}
private void MethodEnd()
{
//#4
//Good luck!! Martin
}
}
// UserControlY
public class Y : UserControl
{
private Y _instance;
private X _x;
//Constructor
public Y();
{
_x = X.GetInstance();
_x.XChanged+= new event(_xChanged);
}
public event EventHandler YChanged;
private void _xChanged(object sender, event e)
{
//#2
if(YChanged!=null)
{
YChanged(this, EventArgs.Empty);
}
}
public static Y GetInstance()
{
if(_instance==null)
{
_instance = new Y();
}
return _instance;
}
}
|
|
|
|
|
I would inject an event broker between the two controls. The broker would take care of notifying each control of when it should do it's work, based on the events fired by the other control. This technique will localize the event coordination logic, so that it's not spread out between multiple classes/methods.
Josh
|
|
|
|
|
Hi, I have a C# form with a webbrowser in it. I'm using the execScript method of the web browser to insert various javascript snippets during runtime. I'd like to know if there is an easy way to toggle these scripts on and off. Is there some sort of method inside the web browser that would just allow me to enable/disable execution of all running scripts? I've looked around and can't find any help on the topic, so any advice would be appreciated. Thanks.
|
|
|
|
|
[Flags]
public enum MyTest
{
test1 = 1,
test2 = 2,
test3 = 4
}
evar is the Enum type *** typeof(MyTest) ***
"test2" is one of the enumerated values in "MyTest"
<br />
Enum first = evar as Enum;<br />
<br />
object tt1 = Enum.Parse(t, "test2");<br />
object first2 = first & tt1;
I want to "And" the value out. To determine if it exists. But I will never know which enum I am using.
I noted the line that the problem exists. Does anyone know how I could do a bit operation an a value like that?
Thanks,
Nick
1 line of code equals many bugs. So don't write any!!
|
|
|
|
|
http://msdn2.microsoft.com/en-us/library/6e3t9w21.aspx[^]
The Flags attribute denotes a special kind of enumeration called a bit field. The runtime
itself does not distinguish between traditional enumerations and bit fields, but your language
might do so. When this distinction is made, bitwise operators can be used on bit fields, but
not on enumerations, to generate unnamed values. Enumerations are generally used for lists of
unique elements, such as days of the week, country or region names, and so on. Bit fields are
generally used for lists of qualities or quantities that might occur in combination, such as
Red And Big And Fast.
|
|
|
|
|
thanks. Even though that page didnt help any
Nick
1 line of code equals many bugs. So don't write any!!
-- modified at 12:58 Thursday 29th June, 2006
|
|
|
|
|
An enum is just an integer value, and nothing prevents you from doing bitwise operations on them.
|
|
|
|
|
Wow, i'm an idiot, sorry Nick.
|
|
|
|
|
LOL
1 line of code equals many bugs. So don't write any!!
|
|
|
|
|
I did this:
Type t = typeof(MyTest);
int first = (int)MyTest.test2;
int tt1 = (int)Enum.Parse(t, "test2");
MyTest first2 = (MyTest)(first & tt1);
Console.WriteLine(first2);
Logifusion[^]
|
|
|
|
|
yeah the only problem is that you know what myTest is. Where as I didnt.
I did this
<br />
public bool IsBitExist(object evar, object val)<br />
{<br />
<br />
<br />
Type enumType = evar.GetType();<br />
<br />
if (t.IsEnum)<br />
{<br />
if (IsFlagType(t.GetCustomAttributes(true)))<br />
{<br />
byte mainEnum = (byte)evar;
<br />
object parsedString = Enum.Parse(enumType, val as string);
object resultedEnum = mainEnum & (byte)parsedString;
int passedInValue = (byte)parsedString;
int checkValue = (int)resultedEnum;
return (passedInValue == checkValue ? true : false); <br />
}<br />
<br />
}<br />
return true;<br />
}<br />
thanks for helping. I got it too work this way
Nick
1 line of code equals many bugs. So don't write any!!
|
|
|
|
|
A simple example...
using System;
namespace EnumTests {
[Flags]
public enum Roles {
Guest = 1,
AccountManager = 2,
Admin = 4
}
public class Person {
public Roles Roles;
}
public class EnumTest {
static void Main(string[] args) {
Person p = new Person();
p.Roles = Roles.Guest | Roles.AccountManager;
if ((Roles.Admin & p.Roles) == 0) {
Console.WriteLine("Person p is not an admin. {0}", (int)(Roles.Admin & p.Roles));
} else {
Console.WriteLine("Person p is an admin. {0}", (int)(Roles.Admin & p.Roles));
}
Console.ReadLine();
}
}
}
Try code model generation tools at BoneSoft.com.
|
|
|
|
|
Uhh, what are you talking about.
I said abstract.
Anyone can make an enum and bitwise off of it.
Thanks, but I aleady solved my problem.
Nick
1 line of code equals many bugs. So don't write any!!
|
|
|
|
|
You said abstract in the title, and there is no such thing as an abstract enum. What the hell are you talking about?
Forget it.
Try code model generation tools at BoneSoft.com.
|
|
|
|
|
I'd like to extend the functionality of drawing.image However when attempting to inherit im told that drawing.image has no constructor defined. How do I go about extending this class? Thanks.
|
|
|
|
|
Image's constructor is internal, so you can't use it from outside of the System.Drawing.dll assembly. Is there a reason why you don't want to derive from the Bitmap class instead? Bitmap has public ctors.
Josh
|
|
|
|
|
You can't derive from Image since it's constructors are internal. You'll have to derive from one of its children, like Bitmap.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
How does it have childern if its constructors are internal?
Best,
Jun
|
|
|
|
|
It's weird. It's an abstract class (MustInherit for you VB'ers) that you can't inherit from. Yet, Bitmap and Metafile both inherit from it. I can't figure out how they did it. I copied the Bitmap class code method-for-method, property-for-property, using the lastest .NET Reflector and into my own implementation, and still couldn't get it to compile.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Bitmap and Metafile can inherit because they are in the same assembly.
|
|
|
|
|
I just remembered that, about 20 minutes after I posted that message. :->
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Ahh, Thanks much every one. I think bitmap can inherit from image because the image constructor is defined as a "friend" of bitmap in the assembly.
-- modified at 14:56 Thursday 29th June, 2006
|
|
|
|
|
Can we do the same so that we can derive from Image too?
Best,
Jun
|
|
|
|
|
I suppose so. If you could manipulate the image class assembly and name the new image class as a friend it should work. Here is an MSDN article on friend assemblies in c#. Your are effectively exposing the internals of the image class to an outside assembly or class. That is what is happening with the bitmap class.
http://msdn2.microsoft.com/en-us/library/0tke9fxk.aspx
|
|
|
|