Infinit loop
wongtd
wongtd at smm.com
Sun May 11 21:00:27 PDT 2008
Ary Borenszweig Wrote:
> wongtd escribió:
> > see this here
> >
> > module Box; import dwt.DWT; import dwt.widgets.Composite; import dwt.widgets.Control; import dwt.widgets.Text; import dwt.widgets.Shell; import dwt.widgets.Display; import tango.io.Stdout; class Box { private Control[char[]] controls; // Use associative array this (Composite parent ,int style ) { auto box = new Composite(parent,DWT.SINGLE); box.setSize(700,40); auto No = new Text(box,DWT.LEFT); No.setBounds(1,15,10,15); No.setText(""); auto Date = new Text(box,DWT.LEFT); Date.setBounds( 21, 15, 60, 15); Date.setText(""); auto Content = new Text(box,DWT.LEFT); Content.setBounds( 90, 15,70, 15); Content.setText(""); box.setVisible = true; controls["No"] = No; controls["Date"] = Date; controls["Content"] = Content; box.setTabList(controls.values); } void setText(char[] name, char[] text) { controls[name].setText(text); } } void main () { Display display = new Display
> (); Shell shell = new Shell (display); shell.setText("Boxes"); Box mybox1 = new Box(shell,DWT.SINGLE); mybox1.setText("No","wire"); Box mybox2 = new Box(shell,DWT.SINGLE); mybox2.setText("Content","Fishingline"); shell.pack(); shell.open(); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } display.dispose (); } /*---------------------------------------------------------------------------- Box.d(44): Error: no property 'setText' for type 'dwt.widgets.Control.Control' Box.d(44): Error: function expected before (), not 1 of type int */
>
> The formatted code is:
>
> ---
> module Box;
>
> import dwt.DWT;
> import dwt.widgets.Composite;
> import dwt.widgets.Control;
> import dwt.widgets.Text;
> import dwt.widgets.Shell;
> import dwt.widgets.Display;
> import tango.io.Stdout;
>
> class Box {
> private Control[char[]] controls; // Use associative array
>
> this(Composite parent, int style) {
> auto box = new Composite(parent, DWT.SINGLE);
> box.setSize(700, 40);
> auto No = new Text(box, DWT.LEFT);
> No.setBounds(1, 15, 10, 15);
> No.setText("");
> auto Date = new Text(box, DWT.LEFT);
> Date.setBounds(21, 15, 60, 15);
> Date.setText("");
> auto Content = new Text(box, DWT.LEFT);
> Content.setBounds(90, 15, 70, 15);
> Content.setText("");
> box.setVisible = true;
> controls["No"] = No;
> controls["Date"] = Date;
> controls["Content"] = Content;
> box.setTabList(controls.values);
> }
>
> void setText(char[] name, char[] text) {
> controls[name].setText(text); // ** Here's the error **
> }
> }
>
> void main() {
> Display display = new Display();
> Shell shell = new Shell(display);
> shell.setText("Boxes");
> Box mybox1 = new Box(shell, DWT.SINGLE);
> mybox1.setText("No", "wire");
> Box mybox2 = new Box(shell, DWT.SINGLE);
> mybox2.setText("Content", "Fishingline");
> shell.pack();
> shell.open();
> while(!shell.isDisposed()) {
> if(!display.readAndDispatch())
> display.sleep();
> }
> display.dispose();
> }
> ---
>
> You are getting that error because the class Control doesn't have a
> method named setText. You probably want to declare controls as follows:
>
> private Text[char[]] controls; // Use associative array
>
> (and probably use another name instead of controls)
>
> >
> > I play with and put in
> >
> > }
> >
> > void setText(char[] text)
> > {
> > setText(text);//dont understand why this does not cause infinite loop?
> > }
>
> When you defined that method, did you invoke it? If not, that's why you
> didn't get infinite loops. But you should, if you invoke it.
>
> >
> > void setText(char[] name, char[]text)
> > {
> > // name.setText(text);
> > }
> > }
> >
> > with layout in shell above compiles and runs giving 9 text boxes with right text.
> >
> > Question When setText(name,text ) is called Why does setText(text) not cause infinit loop?
>
> That's a different question. setText(name, text) and setText(text) are
> different methods: two methods are considered the same if they have the
> same name, same formal arguments, and same return type.
>
> > It calls itself seems so
> > I tried to put in 'override' but would not compile
>
> Because setText(char[] name, char[] text) is not a method of Object (the
> class your Box is inheriting from). It wouldn't work either if you
> extended from Text, because Text has the method setText(char[] text),
> which is a different method than setText(char[] name, char[] text).
Ok file posted too but did not show only pasted contents direct here.
setText(name text) calls (invokes) setText(text) which is method of Text. Box creates many Text objects , each has a setText(text) method .
Notice setText(text) calls itself ?
More information about the Digitalmars-d-learn
mailing list