Cześć wszystkim.
Mam kolejny problem z Windows Forms - mam tekst wieloliniowy w textboxie textBox1
i mam, za pomocą dialogu, umożliwić drukowanie tego tekstu, który jest w tym textboxie. Jak to zrobić? Przypuszczam, że ma to być z użyciem PrintDialog
, bo taki znalazłem na stronie MSDN (http://msdn.microsoft.com/pl-pl/library/system.windows.forms.printdialog.aspx), jednak nie mogę tam nic konkretnego znaleźć odnośnie wydrukowania właśnie zawartościtextBox1
.
Z góry dzięki za zainteresowanie.
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 9 lat
- Postów:72
tutaj masz gotowca
http://patryknet.blogspot.com/2009/11/drukowanie.html
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 9 lat
- Postów:72
A to nie przypadkiem C# ? Ja piszę w C++. Ten kod wywala miliard błędów, próbowałem jakoś przerabiać, dodawać kwantyfikatory zakresu... Lipa :/.

- Rejestracja:ponad 12 lat
- Ostatnio:około 6 lat
- Postów:62
Tak to jest c#, ale idea pozostaje ta sama. PrintDialog służy do wywołania okna wyboru drukarki. Natomiast za samo drukowanie odpowiedzialna jest klasa PrintDocument. Musisz obsłużyć zdarzenia BeginPrint, PrintPage i EndPrint.
Tutaj masz link z przykładem z msdn:
http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-2
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 9 lat
- Postów:72
Generalnie mam taki kod -> http://pastebin.com/X7vaKNpv
Chodziło mi o to (to z przykładów z MSDN), żeby zawartość textBox1
była zapisywana do zmiennej typu ^String
, a następnie wysyłana do drukarki. Po kliknięciu na button6
normalnie otwiera się okienko wyboru drukarki, ale po jej wybraniu wyskakuje MessageBox z napisem "OK", klikam OK i wywala aplikację.
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 9 lat
- Postów:72
Racja, dzięki, dodałem dwie linijki:
using namespace System::Drawing::Printing;
PrintDocument^ docToPrint = gcnew PrintDocument();
Teraz działa bez błędów/crashów, ale drukarka drukuje pustą stronę.
Czy instrukcje:
String^ text = textBox1->Text;
(.....)
e->Graphics->DrawString(text, printFont, System::Drawing::Brushes::Black, 10, 10 );
nie powinny powodować drukowania właśnie zawartości textBox1
?

- Rejestracja:ponad 21 lat
- Ostatnio:około 2 godziny
A funkcja document_PrintPage
w ogóle wykonuje się? bo z tego kodu co widzę, to nigdzie nie jest wywoływana...
Powinna być podana obiektowi docToPrint
jako jego zdarzenie PrintPage
.
Za mało starasz się zrozumieć, a za dużo polegasz na metodzie Copy'ego-Paste'a...
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 9 lat
- Postów:72
No nie wiem, tworzę to wszystko po prostu korzystając z przykładów z MSDN, z których połowa nie działa. Gdyby była jakaś literatura czy konkretna strona na te tematy, chętnie bym się tego nauczył. C# jednak nie znam w ogóle i ciężko mi tłumaczyć przykłady na nim oparte na C++. A program muszę zrobić i tyle, więcej nie chcę mieć nic wspólnego z Windows Forms z użyciem C++/CLI.
No trudno, nie wiem co masz na myśli mówiąc " Powinna być podana obiektowi docToPrint jako jego zdarzenie PrintPage."... Fakt, nie jest nigdzie wywoływana, próbowałem napisać takie wywołanie dla obiektu docToPrint
jak wspomniałeś: document_PrintPage(docToPrint, )
- nie wiem jednak co podać jako drugi argument.
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 9 lat
- Postów:72
Azarien, wielkie dzięki ! Dokładnie o to chodziło, teraz ładnie drukuje :).
Tak więc, na koniec, dla potomnych: poniżej przykładowy kod, aby wysłać do drukarki zawartość textBox1
(w tym przypadku po kliknięciu na button6
):
// DRUKOWANIEEEEEE
// Declare the PrintDocument object.
System::Drawing::Printing::PrintDocument^ docToPrint;
// This method will set properties on the PrintDialog object and
// then display the dialog.
void button6_Click( System::Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
// Allow the user to choose the page range he or she would
// like to print.
printDialog1->AllowSomePages = true;
// Show the help button.
printDialog1->ShowHelp = true;
// Set the Document property to the PrintDocument for
// which the PrintPage Event has been handled. To display the
// dialog, either this property or the PrinterSettings property
// must be set
PrintDocument^ docToPrint = gcnew PrintDocument();
printDialog1->Document = docToPrint;
;
;
;
;
System::Windows::Forms::DialogResult result = printDialog1->ShowDialog();
System::Windows::Forms::MessageBox::Show( result.ToString() );
docToPrint->PrintPage += gcnew PrintPageEventHandler(this, &Form1::document_PrintPage);
;
;
// If the result is OK then print the document.
if ( result == System::Windows::Forms::DialogResult::OK )
{
docToPrint->Print();
}
}
// The PrintDialog will print the document
// by handling the document's PrintPage event.
void document_PrintPage( Object^ /*sender*/, System::Drawing::Printing::PrintPageEventArgs^ e )
{
// Insert code to render the page here.
// This code will be called when the control is drawn.
// The following code will render a simple
// message on the printed document.
String^ text = textBox1->Text;
System::Drawing::Font^ printFont = gcnew System::Drawing::Font( "Arial",35,System::Drawing::FontStyle::Regular );
// Draw the content.
e->Graphics->DrawString(text, printFont, System::Drawing::Brushes::Black, 10, 10 );
}
// KONIEC DRUKOWANIA
- Rejestracja:ponad 7 lat
- Ostatnio:8 miesięcy
- Postów:19
Witam,
Drukowania z jednego textboxa jest pełno, ale z dwóch czy więcej już nie koniecznie ( a może po prostu kiepsko szukam). Może znajdzie się Ktoś kto na podstawie tego kodu powie mi jak dodać kolejny textbox do druku żeby drukował się pod tym pierwszym. Z góry dzięki