Zamykanie formatki wysłanej jako object sender

0

Witam! Mam formatkę, w której tworzę obiekt będący nową formatką:

private void Form_Load(object sender, EventArgs e)
        {
            this.Enabled = false;

            Form2 f = new Form2 ();
            f.LoggingSucced += new LoggingEvents.LoggingSuccedEventHandler(LoggingSucced_Handler);
            f.Show();

        }

Potem łapię event:

private void LoggingSucced_Handler(object sender, LoggingEventArgs e)
        {
            Form2 f2 = (Form2)sender;
            f2.Close();
        }

Może ktoś wytłumaczyć dlaczego zamykanie tej formatki nie działa? Podejrzewam, że chodzi o zmienne lokalne.

0

a co to jest LoggingSucced, LoggingSuccedEventHandler i jak jest wywoływany?

0

LoggingSucced to event, który wsytępuje w formatce Form2 po pomyślnym zalogowaniu na serwer.

0

_
kod, KOD, KOD, <font size="100">KOD</span>

0
public partial class LogInForm : Form
    {
        #region Properties
        private Client client;
        public Client Client { get { return client; } set { client = value; } }
        #endregion

        #region Events
        public event LoggingEvents.LoggingSuccedEventHandler LoggingSucced;
        public event LoggingEvents.LoggingFailedEventHandler LoggingFailed;
        #endregion

        #region Constructor
        public LogInForm()
        {
            InitializeComponent();
        }
        #endregion

        #region Protected Methods

        protected void OnLoggingSucced(LoggingEventArgs e)
        {
            if (LoggingSucced != null)
            {
                LoggingSucced(this, e);
            }
        }

        protected void OnLoggingFailed(LoggingEventArgs e)
        {
            if (LoggingFailed != null)
            {
                LoggingFailed(this, e);
            }
        }

        #endregion

        #region Private Methods
        private void buttonLogIn_Click(object sender, EventArgs e)
        {

            if (this.textBoxNickname.Text == "")
            {
                MessageBox.Show("Nickname cannot be empty!");
            }
            else if (this.textBoxPort.Text.Length != 4)
            {
                MessageBox.Show("Port has to have 4 numbers!");
            }
            else
            {
                try
                {
                    int i;
                    Int32.TryParse(this.textBoxPort.Text, out i);
                    try
                    {
                        this.Client = new Client(this.textBoxNickname.Text);
                        this.Client.ConnectToTheServer(IPAddress.Parse(textBoxServerIp.Text), Int32.Parse(textBoxPort.Text));
                        this.Client.CommandReceived += new CommandEvents.CommandReceivedHandler(CommandReceived_Handler);
                        this.Client.CommandFailedSent += new CommandEvents.CommandFailedSent(CommandFailedSent_Handler);
                        this.Client.ClientDisconnected += new ClientEvents.ClientDisonnectedHandler(ClientDisconnected_Handler);
                        this.Client.LogIn();                        
                    }
                    catch (Exception ex)
                    {
                      MessageBox.Show("Cannot access server! " + ex.Message);
                    }

                }
                catch (Exception ex)
                {
                    MessageBox.Show("Port has to have 4 numbers! " + ex.Message);
                }
            }
        }

        private void CommandReceived_Handler(object sender, CommandEventArgs e)
        {
            this.Client.CommandReceived -= new CommandEvents.CommandReceivedHandler(CommandReceived_Handler);

            switch (e.Command.CommandType)
            {
                case Commands.CommandType.LogginSucced:
                    {
                        OnLoggingSucced(new LoggingEventArgs(e.Command.CommandText, this.client));
                        RemoveEventsFromClient();
                        break;
                    }
                case Commands.CommandType.LogginFailed:
                    {
                        OnLoggingFailed(new LoggingEventArgs(e.Command.CommandText, this.client));
                        break;
                    }
            }
        }

        private void CommandFailedSent_Handler(object sender, EventArgs e)
        {
            OnLoggingFailed(new LoggingEventArgs("Logging failed!", this.client));
        }

        private void ClientDisconnected_Handler(object sender, ClientEventArgs e)
        {
            OnLoggingFailed(new LoggingEventArgs(e.Message, e.Client));
        }

        private void buttonCancel_Click(object sender, EventArgs e)
        {
            OnLoggingFailed(new LoggingEventArgs("Logging has been cancelled", this.client));
        }

        private void RemoveEventsFromClient()
        {
            this.client.ClientDisconnected -= ClientDisconnected_Handler;
            this.client.CommandFailedSent -= CommandFailedSent_Handler;
            this.client.CommandReceived -= CommandReceived_Handler;
           /* if (this.client.CommandSucceedSent != null)
            {
               //
            }*/
        }

        #endregion

    }
}
0

jesteś pewien, że LoggingSucced_Handler jest wywoływane? - postaw tam breakpointa i zobacz czy wchodzi. Jeśli wchodzi to zobacz jaką wartość ma sender

0

tak, jest wykonywane..

0

Czy ten kod jest taki jaki masz? Tutaj masz Form2:

Form2 f = new Form2 ();

A tutaj już LogInForm:

public partial class LogInForm : Form

Dlaczego LogInForm nie może się sama zamykać?

0

rzeczywiscie tam gdzie

Form2 

powinno być LogInForm


, ale to nie jest problem.
0

Nie dostajesz jakiegoś wyjątku? Zdebuguj z opcją, żeby zatrzymywał się również na złapanych wyjątkach. Zakładam, że nie masz podpiętego anulowania zamykania w OnFormClosing

EDIT:
Ten Client nie implementuje przypadkiem IDisposable? Ja bym sprawdził, czy nie trzeba zwolnić jego zasobów. To na marginesie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0