|
I originally compiled it on framework 1.0, and the subsequent tests were run on 1.0, 1.0 SP1, 1.0 SP2 and 1.1, with varying OS's. I have just now compiled it on framework 1.1, and it works fine on my dev machines (I didn't send it out for beta testing again).
Just to be clear, what should be happening is that any text located in textBox1 should be copied to each TexBox in the collection when button1 is clicked.
Like I noted previously, I have coded far deeper references than this that are in production systems, without problems.
Maybe there's a problem with the way your system/s are compiling the code? I know that's a bizarre scenario, but this is a bizarre behavior!
I you like, I can send you a compliled version for testing, just send me an email address to use.
|
|
|
|
|
You say you're updating text in a TextBox? Is this happening in a separate thread? In any case, you should invoke Control.Refresh() or Control.Update() on the control to get the value to be repainted, expecially if changing the text in a separate thread (since UI changes are supposed to be done in the main UI thread and not doing so results in "onforeseen" errors.
Have you actually stepped through this in the debugger and made sure that the changes are correct, assuring that the references are equal? You could also use Object.Equals() on the two references to see if the references are equal (instead of if the objects are equal).
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
It's all happening in the same thread, yes the debugger shows copies are made when added into the collection, 'no' I don't know what's going on, 'yes' I'm throwing my toys out of the pram.
All I want to do, is bind textbox's to member variables in a class. And I just want the member variables updated each time the controls .text property is changed - preferably via an event.
It's sounds simple enough - but I can't manage it.
|
|
|
|
|
What collection class are you using? I do this quite a bit in our application using provided classes and custom classes and have never had problems. So long as I add the TextBox object's reference to the collection itself, it's no big deal.
Are you by change passing a reference to the string in TextBox.Text ?
Also, what you're describing is property data-binding. You can bind properties of objects to properties of other objects, or even to collections of objects (happens a lot in ASP.NET). You could use textBox1.DataBindings.Add("Text", this, "Text") .
If the Text property of your control is supposed to modify the TextBox 's Text property, why not just do this?
public class MyControl : UserControl
private TextBox textBox1;
public string Text
{
get { return this.textBox1.Text; }
set { this.textBox1.Text = value; }
}
}
...although maybe I'm not understanding you right.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
Is it possible to obtain a system-wide cursor status? I've tried using Cursor.current.tostring() but it only returns the status of the cursor within the application running. This means that if the cursor status is updated OUTSIDE of the application, the status is not updated at all.
|
|
|
|
|
That's how things are. I found this out a while back while using GetCursor() in Win32. There might be an easy way around this, but I don't know of one.
"Blessed are the peacemakers, for they shall be called sons of God." - Jesus
"You must be the change you wish to see in the world." - Mahatma Gandhi
|
|
|
|
|
After some extensive digging, i found out that to get the cursor "image" or icon, we need to use GetCursorInfo() but i don't know how to write the codes (particularly the dllimport part) and get it working in C#. Does anyone have any ideas?
|
|
|
|
|
//----------------------------------------------------------------------------
// 4.2 How to Implement Functors
// abstract base class
class TFunctor
{
public:
// two possible functions to call member function. virtual cause derived
// classes will use a pointer to an object and a pointer to a member function
// to make the function call
virtual void operator()(const char* string)=0; // call using operator
virtual void Call(const char* string)=0; // call using function
};
// derived template class
template <class tclass=""> class TSpecificFunctor : public TFunctor {
private:
void (TClass::*fpt)(const char*); // pointer to member function
TClass* pt2Object; // pointer to object
public:
// constructor - takes pointer to an object and pointer to a member and stores
// them in two private variables
TSpecificFunctor(TClass* _pt2Object, void(TClass::*_fpt)(const char*))
{ pt2Object = _pt2Object; fpt=_fpt; };
// override operator "()"
virtual void operator()(const char* string)
{ (*pt2Object.*fpt)(string);}; // execute member function
// override function "Call"
virtual void Call(const char* string)
{ (*pt2Object.*fpt)(string);}; // execute member function
};
//----------------------------------------------------------------------------
// 4.3 Example of How to Use Functors
// dummy class A
class TClassA{
public:
TClassA(){};
void Display(const char* text) { cout << text << endl; };
/* more of TClassA */
};
// dummy class B
class TClassB{
public:
TClassB(){};
void Display(const char* text) { cout << text << endl; };
/* more of TClassB */
};
// main program
int main(int argc, char* argv[])
{
// 1. instantiate objects of TClassA and TClassB
TClassA objA;
TClassB objB;
// 2. instantiate TSpecificFunctor objects ...
// a ) functor which encapsulates pointer to object and to member of TClassA
TSpecificFunctor<tclassa> specFuncA(&objA, TClassA::Display);
// b) functor which encapsulates pointer to object and to member of TClassB
TSpecificFunctor<tclassb> specFuncB(&objB, &TClassB::Display);
// 3. create array with pointers to TFunctor, the base class and ...
TFunctor** vTable = new TFunctor*[2];
// ... assign functor addresses to the function pointer array
vTable[0] = &specFuncA;
vTable[1] = &specFuncB;
// 4. use array to call member functions without the need of an object
vTable[0]->Call("TClassA::Display called!"); // via function "Call"
(*vTable[1]) ("TClassB::Display called!"); // via operator "()"
// 5. release
delete[] vTable;
// hit enter to terminate
cout << endl << "Hit Enter to terminate!" << endl;
cin.get();
return 0;
}
Can you tell me the underlined sentences' meaning?
Thank you!
|
|
|
|
|
|
The problems are:
1.virtual void operator()(const char* string)=0; // call using operator
2.template class TSpecificFunctor : public TFunctor
//TFunctor is a class
3.TSpecificFunctor specFuncA(&objA, TClassA::Display);
4.TFunctor** vTable = new TFunctor*[2];
Can you tell me their meaning?
Thank you again
The following codes you can refer:
// This code was compiled and tested with Borland C++ Builder 5.0. Let me know
// if there is something I should mention for the use with other compilers.
#pragma hdrstop // Borland C++ Builder specific
#pragma argsused // do.
#include // due to: cout
// abstract base class
class TFunctor
{
public:
// two possible functions to call member function. virtual cause derived
// classes will use a pointer to an object and a pointer to a member function
// to make the function call
virtual void operator()(const char* string)=0; // call using operator
virtual void Call(const char* string)=0; // call using function
};
// derived template class
template class TSpecificFunctor : public TFunctor
{
private:
void (TClass::*fpt)(const char*); // pointer to member function
TClass* pt2Object; // pointer to object
public:
// constructor - takes pointer to an object and pointer to a member and stores
// them in two private variables
TSpecificFunctor(TClass* _pt2Object, void(TClass::*_fpt)(const char*))
{ pt2Object = _pt2Object; fpt=_fpt; };
// override operator "()"
virtual void operator()(const char* string)
{ (*pt2Object.*fpt)(string);}; // execute member function
// override function "Call"
virtual void Call(const char* string)
{ (*pt2Object.*fpt)(string);}; // execute member function
};
//-----------------------------------------------------------------------------------------
// 4.3 Example of How to Use Functors
// dummy class A
class TClassA{
public:
TClassA(){};
void Display(const char* text) { cout << text << endl; };
/* more of TClassA */
};
// dummy class B
class TClassB{
public:
TClassB(){};
void Display(const char* text) { cout << text << endl; };
/* more of TClassB */
};
// main program
int main(int argc, char* argv[])
{
// 1. instantiate objects of TClassA and TClassB
TClassA objA;
TClassB objB;
// 2. instantiate TSpecificFunctor objects ...
// a ) functor which encapsulates pointer to object and to member of TClassA
TSpecificFunctor specFuncA(&objA, TClassA::Display);
// b) functor which encapsulates pointer to object and to member of TClassB
TSpecificFunctor specFuncB(&objB, &TClassB::Display);
// 3. create array with pointers to TFunctor, the base class and ...
TFunctor** vTable = new TFunctor*[2];
// ... assign functor addresses to the function pointer array
vTable[0] = &specFuncA;
vTable[1] = &specFuncB;
// 4. use array to call member functions without the need of an object
vTable[0]->Call("TClassA::Display called!"); // via function "Call"
(*vTable[1]) ("TClassB::Display called!"); // via operator "()"
// 5. release
delete[] vTable;
// hit enter to terminate
cout << endl << "Hit Enter to terminate!" << endl;
cin.get();
return 0;
}
|
|
|
|
|
Aleon666 wrote:
virtual void operator()(const char* string)=0; // call using operator
This is an abstract virtual function. The class containing an abstract virtual function cannot be instantiated, and is intended to be a base class.
Aleon666 wrote:
template class TSpecificFunctor : public TFunctor
I guess this should look like this:
template<class TClass> class TSpecificFunctor : public TFunctor
This is a declaration of a template class. I think you better read on templates in MSDN.
Aleon666 wrote:
TSpecificFunctor specFuncA(&objA, TClassA::Display);
I again guess it should be:
TSpecificFunctor<TClassA> specFuncA(&objA, TClassA::Display);
This line creates an instance of TSpecificFunctor object, passing TClassA as a template argument, and (&objA, TClassA::Display) as constructor arguments.
Aleon666 wrote:
TFunctor** vTable = new TFunctor*[2];
This creates an array which contains two pointers to TFunctor objects. This array is then initialized with two created functors: specFuncA and specFuncB .
HTH
Alexandre Kojevnikov
MCAD charter member
Leuven, Belgium
|
|
|
|
|
|
Hi! Is it possible for a method to return a struct? like:
Thanks!
If not, how do i make a method return data with multiple data types?
Thanks again!
"To teach is to learn twice"
|
|
|
|
|
daljv wrote:
Is it possible for a method to return a struct?
Yes
struct Data
{
int i;
string bar;
}
public Data DoStuff()
{
Data d = new Data();
d.i = 1;
d.bar = "Hello";
return d;
} Something like that will work
James
"I despise the city and much prefer being where a traffic jam means a line-up at McDonald's"
Me when telling a friend why I wouldn't want to live with him
|
|
|
|
|
You beat me to it by a minute
*goes back to work*
|
|
|
|
|
But yours will compile
James
"I despise the city and much prefer being where a traffic jam means a line-up at McDonald's"
Me when telling a friend why I wouldn't want to live with him
|
|
|
|
|
hehehe..
|
|
|
|
|
While your example struct seems to be missing, the answer is yes. A method can return void or any object you want it to - naturally this includes your own structs and classes.
In this example I'll create a struct to hold an error message (MyError) and use MyMethod to return it:
public struct MyError<br />
{<br />
public bool HasErrors;<br />
public string ErrorMessage;<br />
<br />
public MyError(bool hasErrors, string errorMessage)<br />
{<br />
HasErrors = hasErrors;<br />
ErrorMessage = errorMessage;<br />
}<br />
}
and now a method that returns it:
public class MyClass<br />
{<br />
public MyError CheckForErrors(bool someCondition)<br />
{<br />
if(!someCondition)<br />
{<br />
return new MyError(true, "Errors ocurred");<br />
}<br />
else<br />
{<br />
return new MyError(false, "She's Apples Mate");<br />
}<br />
}<br />
}
|
|
|
|
|
lol, leave it to me to forget the important things, like visibility modifiers
James
"I despise the city and much prefer being where a traffic jam means a line-up at McDonald's"
Me when telling a friend why I wouldn't want to live with him
|
|
|
|
|
I'm back at work, really
|
|
|
|
|
yep. thanks a lot. Thats a very good explanation.
"To teach is to learn twice"
|
|
|
|
|
the problem is when i draw a column using the Rect method at for example x = 10 y = 10
and i print the text inputting these same values ...but the text is printed at the left ...i want it to be printed on the right ...like right align..Thanks
|
|
|
|
|
When you use the DrawString method you should specify a StringFormat object with the Alignment property set to StringAlignment.Far .
I think that will do what you want.
James
"I despise the city and much prefer being where a traffic jam means a line-up at McDonald's"
Me when telling a friend why I wouldn't want to live with him
|
|
|
|
|
I got some info that might help u guys ..remeber i said my accounting software was throwing a clr exception 80004005 and crashes ...well it happens when u execute it with the Compatability set to windows98/me or simply by executing the programm on a win9x box..I just found out that all my C# programms give the same error !!! Thats preetty confusing to me ..It means my compiler is giving me the problem ??
Might be u guys can help me out on that !!;)
|
|
|
|
|
Confuses the heck out of me also. All my c# apps crash when compatibily is set to 98
|
|
|
|