Archive for January, 2009

The PrintForm-Component in the Visual Basic Powerpack for Windows Forms

Friday, January 23rd, 2009

Did you ever wanted to print a Form without calling any native code? Well, with Windows Forms and Visual Studio 2008 this is a really simple exercise. When you design your WinForms-Application you’ll find a Tab Visual Basic PowerPacks in the Toolbox of Visual Studio 2008. In this Tab, you’ll find a component called PrintForm. Simply drop this component on your form, and you’ll find all the functionality you need. Let’s take a look at a small sample by using a very simple Windows Forms application.

The application just has a Browse-Button to browse an image from the filesystem, a PictureBox to display the image and a TextBox displaying the path to the image.

printForm_pic1

The Browse-Button does nothing more than showing an OpenFileDialog and setting the Text-Property of the TextBox to the selected file and assigning the chosen image to the Image-Property of the PictureBox.

private void btnBrowse_Click(object sender, EventArgs e)
{
  var dlg = new OpenFileDialog
    {
      Multiselect = false,
      Filter = "JPEG (*.jpg)|*.jpg|JPEG (*.jpeg)|*.jpeg"
               + "|GIF(*.gif)|*.gif|Bitmap (*.bmp)|*.bmp"
    };
  if(dlg.ShowDialog() == DialogResult.OK)
  {
    txtImagePath.Text = dlg.FileName;
    pictureBox1.Image = Image.FromFile(dlg.FileName);
  }
}

The Form above already contains a "Print Form!"-Button. The eventhandler of that Button is currently empty. Let’s implement it. But before that, go to the designer and drag’n'drop a PrintForm-component out of the Toolbox on the Form.

printForm_pic2

After dropping the PrintForm-component, you’ll find it in the Component Tray of the Windows Forms-Designer. It’s named printForm1 by default. I won’t change that here. Now let’s step to the EventHandler of the "Print Form!"-Button.

To print the form, first a PrintDialog is shown allowing the user to select a printer. Then the settings of the PrintDialog are assigned to the PrinterSettings-Property of the printForm1-component. The Print-Method on that component is called passing in the Form (this) and an Enum-Value specifying to print the full Window.

private void btnPrintForm_Click(object sender, EventArgs e)
{
  var dlg = new PrintDialog();
  if(dlg.ShowDialog()==DialogResult.OK)
  {
    printForm1.PrinterSettings = dlg.PrinterSettings;
    printForm1.Print(this, PrintForm.PrintOption.FullWindow);
  }
}

That’s all! :-) E.g. when I print into my PDFPrinter, the resulting PDF-Document will look like this:

printForm_pic3

Beside the PrinterSettings-Property the PrintForm-Component contains some more important properties . The most mentionable one is the PrintAction-Property. It’s of type PrintAction, an enum in Namespace System.Drawing.Printing. The PrintAction-enum contains three values, PrintToPrinter (the default for the PrintForm’s PrintAction-Property), PrintToFile and PrintToPreview.

So to show a preview of the Print-output, you simply need the following to lines:

printForm1.PrintAction = PrintAction.PrintToPreview;
printForm1.Print(this, PrintForm.PrintOption.FullWindow);

Replace the code in btnPrintForm_Click with the two lines above, and you’ll automatically get a preview, like shown below. But be careful. The user can print out of the Preview. If you’ve no PrinterSettings assigned to the PrinterSettings-Property of the PrintForm, the Print will be implicitly written to the users default-Printer.

printForm_pic4

So, that’s all. Get the sample here.

VisualStateManager in Silverlight

Thursday, January 22nd, 2009

Last year I’ve written a german article for the dotnet-magazine about VisualStateManager in Silverlight. As this feature will also be part of WPF 4.0, take a look at the article, which is now available on my homepage. The article is also available on the homepage of Trivadis beside many other articles focused on other IT-Topics.

So read and enjoy. :-)

The promised code example with the ASP.NET Ajax Multicolumn-Dropdown

Monday, January 19th, 2009

During the last months I was asked many times for the code of the Multcolumn-Dropdown that I’ve described in this post. I’ve just created a very small sample-application containing such a dropdown. You can download it here.

If someone of you creates a control out of that source, I would be glad to get a link to it. :-)

Thomas