|
Ok I have two controls, Ok Control X and Control Y, I want control X to be able to raise in event that Control Y is listening for when Control Y hears this event it responds by raising an event/events Control X is listening for and in Turn Control X does some work or method call etc. Any help would be greatly appreciated. Thank you
|
|
|
|
|
X->Y->X->Y... Sounds like infinite looping here
Best,
Jun
|
|
|
|
|
Yeah I am kinda confused myself but it shouldnt end up falling into an infinite loop. Ok here is a long explanation that hopefully will make it more clear.
I have a side bar with buttons on it, each button corresponding to a specific form that will be loaded in to a panel on the same form as the SideBar/ToolBar. Ok hope ur still with me...lol..Alright now these forms are independent of the Toolbar but the tools bars controls the user navigation from form to form. If a user clicks on one of the buttons(wanting to change to another form) I want to currently active form(the form that is being viewed) to know that an attempt to unload it and load another form is about to happen, if this form is at a critical point in its process it needs to be able to say NO dont change me yet and stop the process of the visual unloading of the form and prompting the user to finish whatever he needs to finish and they attempt a change later.
SOOO with all of that, that is why I have a Control X(toolbar) that wants to raise an event to control Y(Form in Panel), Control Y(Form in Panel) will listen for this event, if it is at a point of being able to allow a change then it sends a response back to the Control X(Toolbar) allowing the change of forms to happen. I hope this explains it more clearly. I understand what i need to do, i am just trying to find some code examples to begin to lead me down the right path to see if i am right or not.
Thanks for all the help.
|
|
|
|
|
Is the toolbar on a main form, which has also the instances of the forms?
Are you whant to hide the forms or dispose them, when changing to an other?
|
|
|
|
|
The unload of the forms is just a visual unload, the user can go back to a form and the same data should be showing on the form once it left. And yes the Toolbar is a control it self and is loaded onto the main form. The Toolbar/sidebar looks similar to Outlook 2003's sidebar, the sliding effect with the buttons and what not, if a button is click then the form in the viewing panel changes, but it should only change if the actively viewable form allows the change to happen, but that is at that specific forms discretion.
|
|
|
|
|
Does the active form just say no change now, or should the form finish automaticaly later?
|
|
|
|
|
The form will tell the toolbar, "I can't change now" etc. and the Tool bar will inturn get this response and give a response of its on to the User and stop the process of changing the actively viewable form. Tough problem huh, yeah i am having a tough time wrapping my brain around it too, but hey it is fun. Thanks for all the help i really appreciate this.
|
|
|
|
|
No fear,
we will find a solution!
|
|
|
|
|
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
|
|
|
|