NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Jakub Klindera:23.12.2017 17:12

Zrdavíčko,
mám problém s ukládáním do souboru. Dělám notepad ve WPF a když něco napíšu a chci si to uložit, tak se mi otevře další okno, kde zvolím jméno toho souboru. Problém je v tom, že to mám ve dvou oknech a jakmile to chci vyvolat v tom ukládacím okně, tak nevím, jak to mám vyvolat text v textboxu z hlavního okna, kde se píšou poznámky.

Textbox mám pojmenovaný tbPole

Kód ukládacího okna

private void saveButton_Click(object sender, RoutedEventArgs e)
        {
            soubor = false;
            string cestaKUlozeni = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            string nazev = cestaKUlozeni + @"\Projekt\"+tbSave.Text+@".txt";

            soubor = File.Exists(nazev);

            if (soubor)
            {
                String text = tbPole.Text();  // Tady je chyba

                StreamWriter file = new StreamWriter(nazev);
                file.Write(text);
                file.Close();
            }

            else
            {
                MessageBox.Show("Soubor byl vytvořen, pro uložení stikni tlačítko ještě jednou.");
                File.Create(nazev);
                soubor = true;
            }
        }

to tBPole je v MainWindow

Děkuji

 
Odpovědět
23.12.2017 17:12
Avatar
HONZ4
Člen
Avatar
Odpovídá na Jakub Klindera
HONZ4:23.12.2017 17:40

vyhoď ty závorky:
String text = tbPole.Text;

 
Nahoru Odpovědět
23.12.2017 17:40
Avatar
Odpovídá na HONZ4
Jakub Klindera:24.12.2017 14:21

Ono to nezná .Text

 
Nahoru Odpovědět
24.12.2017 14:21
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Jakub Klindera
Adam Ježek:24.12.2017 14:23

Není to ve WPF .Content ?

Nahoru Odpovědět
24.12.2017 14:23
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Adam Ježek
Adam Ježek:24.12.2017 14:27

Teď na to koukám znova, říkáš že to máš ve dvou oknech? Jestli vyvoláš druhé okno, tak v něm to spíš bude že nezná tbPole, protože je to z druhýho okna. Dej sem přesně tu hlášku co to hází.

Nahoru Odpovědět
24.12.2017 14:27
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Odpovídá na Adam Ježek
Jakub Klindera:24.12.2017 14:31

Ano, mám to ve dvou oknech. MainWindow s TextBoxem a menu a pak když se klikne na uložit, tak vyjede další okno, kde se napíše jméno souboru.

Error CS1061 'object' does not contain a definition for 'Text' and no extension method 'Text' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?) Notepad_Projekt C:\Users\Jakub\sou­rce\repos\Note­pad_Projekt\No­tepad_Projekt\sa­ve_window.xam­l.cs 52 Active

 
Nahoru Odpovědět
24.12.2017 14:31
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Jakub Klindera
Adam Ježek:24.12.2017 14:35

A to druhé okno je Form který si vytvořil, nebo vestavěnej SaveFileDialog?
V prvním případě, máš v tom druhém okně všechny potřebné usingy?

Nahoru Odpovědět
24.12.2017 14:35
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Jakub Klindera
Adam Ježek:24.12.2017 14:45

Odkud vůbec bereš ten tbPole? Proč je to object?
Zkus

string text = (tbPole as TextBox).Text;
Nahoru Odpovědět
24.12.2017 14:45
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na Jakub Klindera
ostrozan:24.12.2017 22:19

Použij SaveFileDialog

 
Nahoru Odpovědět
24.12.2017 22:19
Avatar
Odpovídá na Adam Ježek
Jakub Klindera:26.12.2017 11:00

tbPole je název TextBoxu v MainWindow.
Použil jsem:

string text = (tbPole as TextBox).Text;

Nyní to vyhodilo:
System.NullRe­ferenceExcepti­on: 'Odkaz na objekt není nastaven na instanci objektu.'

Děkuji

 
Nahoru Odpovědět
26.12.2017 11:00
Avatar
HONZ4
Člen
Avatar
Odpovídá na Jakub Klindera
HONZ4:26.12.2017 15:44
private void saveButton_Click(object sender, RoutedEventArgs e)
{
    try
    {
        Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog()
        {
            Filter = "Text Files(*.txt)|*.txt|All(*.*)|*"
        };
        bool? result = dlg.ShowDialog();

        if (result != null && result.Value)
        {
            System.IO.File.WriteAllText(dlg.FileName, tbPole.Text);
        }
    }
    catch(Exception ex) // pokud nastane chyba
    {
        MessageBox.Show(ex.Message); // zobrazí se hláška
    }
}

pokud si s tím nebudeš vědět rady, musíš sem dát celý kód, ať nemusí nikdo hádat jak to tam máš...

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
26.12.2017 15:44
Avatar
HONZ4
Člen
Avatar
HONZ4:26.12.2017 16:06

mimochodem, podmína

if (result != null && result.Value)

se dá po modernu zkrátit na

if (result ?? true)
 
Nahoru Odpovědět
26.12.2017 16:06
Avatar
Jakub Klindera:4.1.2018 17:29

Děkuji, teď už musím jen pořešit OpenFileDialog

 
Nahoru Odpovědět
4.1.2018 17:29
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.