Hi,

Can someone check to see if it's me or SerializationException not being
correctly caught in this code?

Attached is the datafile needed and lib.

I realise that sending a dll poses security risks and accept that some
may not wish to try the code.

Compiled it using gmcs, mono-1.2.3-1, Fedora rawhide.

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;

using BankLibrary;

public class ReadSequentialAccessFileForm : BankUIForm
{
  private System.Windows.Forms.Button openbutton;
  private System.Windows.Forms.Button nextbutton;
  private System.ComponentModel.Container components = null;
  private FileStream input;
  private BinaryFormatter reader = new BinaryFormatter();

  [STAThread]
  static void Main()
  {
    Application.Run(new ReadSequentialAccessFileForm());
  }

  public ReadSequentialAccessFileForm()
  {
    InitializeComponent();
  }
  
  protected override void Dispose( bool disposing )
  {
    if( disposing )
    {
      if (components != null) 
      {
        components.Dispose();
      }
    }
    base.Dispose( disposing );
  }

  #region Windows Form Designer generated code
  
  private void InitializeComponent()
  {
    this.openbutton = new System.Windows.Forms.Button();
    this.nextbutton = new System.Windows.Forms.Button();
    this.SuspendLayout();
    
    this.accounttextbox.TabIndex = 1;    
    this.firstnametextbox.TabIndex = 2;    
    this.lastnametextbox.TabIndex = 3;
    this.balancetextbox.TabIndex = 4;
    
    this.openbutton.Font = new System.Drawing.Font("Microsoft Sans
Serif", 10F);
    this.openbutton.Location = new System.Drawing.Point(32, 232);
    this.openbutton.Name = "openButton";
    this.openbutton.Size = new System.Drawing.Size(144, 32);
    this.openbutton.TabIndex = 0;
    this.openbutton.Text = "Open File";
    this.openbutton.Click += new
System.EventHandler(this.openbutton_Click);
    
    this.nextbutton.Enabled = false;
    this.nextbutton.Font = new System.Drawing.Font("Microsoft Sans
Serif", 10F);
    this.nextbutton.Location = new System.Drawing.Point(216, 232);
    this.nextbutton.Name = "nextButton";
    this.nextbutton.Size = new System.Drawing.Size(144, 32);
    this.nextbutton.TabIndex = 5;
    this.nextbutton.Text = "Next Record";
    this.nextbutton.Click += new
System.EventHandler(this.nextbutton_Click);
    
    this.AutoScaleBaseSize = new System.Drawing.Size(6, 15);
    this.ClientSize = new System.Drawing.Size(400, 279);
    this.Controls.AddRange(new System.Windows.Forms.Control[] {
      this.balancetextbox,
      this.lastnametextbox,
      this.firstnametextbox,
      this.accounttextbox,
      this.balancelabel,
      this.lastnamelabel,
      this.firstnamelabel,
      this.accountlabel,
      this.nextbutton,
      this.openbutton});
    this.Name = "ReadSequentialAccessFileForm";
    this.Text = "Reading a Sequential File";
    this.ResumeLayout(false);
    
  }
  #endregion

  private void openbutton_Click(object s, System.EventArgs e)
  {
    OpenFileDialog filechooser = new OpenFileDialog();
    DialogResult result = filechooser.ShowDialog();
    string filename;
    if (result == DialogResult.Cancel)
      return;

    filename = filechooser.FileName;
    cleartextboxes();

    if (filename == "" || filename == null)
      MessageBox.Show("Invalid filename", "Error", MessageBoxButtons.OK,
                      MessageBoxIcon.Error);
    else
    {
      input = new FileStream(filename, FileMode.Open, FileAccess.Read);
      nextbutton.Enabled = true;
    }
  }

  private void nextbutton_Click(object s, System.EventArgs e)
  {
    try
    {
      Record record = (Record) reader.Deserialize(input);
      string [] values = new string[] {
        record.account.ToString(),
        record.firstname.ToString(),
        record.lastname.ToString(),
        record.balance.ToString() };
      settextboxvalues(values);
    }
    catch (SerializationException)
    {
      input.Close();
      openbutton.Enabled = true;
      nextbutton.Enabled = false;
      cleartextboxes();
      MessageBox.Show("No more records in file", "",
MessageBoxButtons.OK,
                      MessageBoxIcon.Information);
    }
  }
}


-- 

Attachment: BankUI.dll
Description: application/ms-dos-executable

Attachment: streams-test
Description: application/font-ttf

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
Mono-winforms-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-winforms-list

Reply via email to