» »

[c#] print page, tekst iz gradnika na formi

[c#] print page, tekst iz gradnika na formi

japol ::

Zakaj mi ne pobere teksta iz richTextBox1?
V classu Meni.cs imam:
        private Form1 f1 = new Form1();

        public PrintDocument printDocument1 = new PrintDocument();
        public PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog();

        public void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
        {
            string s = f1.richTextBox1.Text;

// nadaljevanje kode
}

"s" je prazen. Nekaj ni v redu s Form1 f1, samo ne vem kaj.
  • spremenil: japol ()

darkkk ::

Narediš novo formo, nič ne daš vanjo (razn če je v konstruktorju oz. designerju v richtextboxu kaj noter)... mora bit prazno.

japol ::

richtextbox1 vsebuje tekst, ni prazen zato tudi s ni prazen.
Če pišem: string s = "nek tekst";
to pa mi prikaže.

mislim da mora biti nekaj podobno narobe kot npr.:
ne smem pisat:
private Form1 f1 = new Form1();
pa potem naprej v neki metodi pišem f1. ... ampak moram pisati
private void Nekaj (Form1 f1)
{
f1. ...
}

zakaj je to tako?

Zakaj ne morem pisati:
private Form1 f1 = new Form1();
private void Nekaj ()
{
f1. ...
}

ali pa
private void Nekaj ()
{
Form1 f1 = new Form1();
f1. ...
}

hexor ::

To moraš narediti zato, da metoda ve na katerem formu se kaj dogaja - v tem primeru podaš referenco f1 tipa Form1 in potem v metodi izvajaš razne funkcije nad podano instanco.
RootMachine ;)

KrEn1234 ::

japol je izjavil:

richtextbox1 vsebuje tekst, ni prazen zato tudi s ni prazen.
Če pišem: string s = "nek tekst";
to pa mi prikaže.

mislim da mora biti nekaj podobno narobe kot npr.:
ne smem pisat:
private Form1 f1 = new Form1();
pa potem naprej v neki metodi pišem f1. ... ampak moram pisati

private void Nekaj (Form1 f1)
{
f1. ...
}



Verjetno je težava, da imaš večje število Form1 referenc, ti pa dostopaš do napačne. Uporabi debuger in preveri vsako referenco posebej.

Drugače pa je pametno, uporabljati tudi "this" operator( npr this.Form1) z pomočjo katerega lahko eksplicitno dostopaš do referenc, ki so definirane na nivoju razreda. Takšna koda je precej lažje berljiva. Neposredno klicanje lastnosti objekta v drugem objektu je anti-pattern. V takih primerih implementiramo wrapper - v praksi bi to pomenilo, da Forma1 implementira Interface, ki implemntira omenjene metode.

public interface IFoo
{
string GetData();
}

public class Form1:IFoo
{
 public string GetData()
 {
  return this.txt.text;
 }
}

public class Main
{
  public IFoo AForm1 { get; protected set; }
  public Main
  {
    this.AForm1 = new Form1(); 
  }

  public void Test()
  {
     string strValue = this.AForm1.GetData(); 
  }
}


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# začetniško vprašanje - klicanje metode

Oddelek: Programiranje
101045 (815) vorantz
»

[c#] Risanje z miško

Oddelek: Programiranje
221434 (1115) japol
»

C#, TextBox in PopUp forma

Oddelek: Programiranje
61110 (1004) MarCar
»

C# iz form2 v form1,textboxi

Oddelek: Programiranje
131952 (1578) Keki
»

c# class

Oddelek: Programiranje
342277 (1871) japol

Več podobnih tem