winforms – Ajudar com Formulario em C#

Ola, sou iniciante ainda no C# e estou com um problema em um código.

Tenho um formulário onde o usuário precisa inserir um valor numérico em uma TextBox, não pode ser maior que 1000 e nem menor que 5. Até ai tudo bem…..eu adicionei um botão no formulário que verifica se o valor digitado estiver dentro do permitido ele passara para outro Formulário, se for maior que 1000 ele retorna uma mensagem alertando o usuário para inserir um valor menor ou maior no caso de ser menor que 5.

Porem o código só funciona com as condições acima, ele não passa para o outro formulário se eu digitar um valor dentro do permitido.

criei uma bool no topo do codigo chamada de “Exibir” para verificar, se for false ele verifica os valores, se for true ele precisa mostrar o proximo formulario.

private bool Exibir = false;

Método para verificar o valor digitado.

public void ValorInserido(int Saldo)
    {
        Exibir = false;
        if (Saldo > 1000)
        MessageBox.Show("O Limite para saque é R$ 1000,00");
        else
        if (Saldo < 5)
            MessageBox.Show("O Valor minimo para saque é R$ 5,00");

    }

Código do botão

 private void btnConfirma_Click(object sender, EventArgs e)
        {
            if (Exibir == false)
            {
                int Valor = Convert.ToInt32(txtValor.Text);
                ValorInserido(Valor);
            }

            else
            {
                TelaCedulas cedulas = new TelaCedulas();
                cedulas.Show();
            }
        }

winforms – Como resolver o erro LNK2001 no C++?

Estou a desenvolver um simulador de jogos de casino em forma no windows forms em C++. No início, quando estava a declarar algumas variáveis, recebi o erro “LNK2001”. Tentei algumas soluções a partir de alguns posts daqui, como a adição de dependências adicionais nas propriedades do projecto e a adição de bibliotecas. Mas nada funcionou, pode alguém que já passou (ou não) por isto ajudar-me?

winforms – Undo/Redo Functionality in DataGridView c#

Review

Welcome to Code Review. There are few suggestions as below.

Layout and formatting

Not sure why many newlines between the curly brackets and the method definition, if statements and for statements. For improving readability, those unnecessary newlines can be removed.

Magic numbers and List<DataTable>

I have no idea about why the initial value of counterUndo is set to 2 (in int counterUndo = 2) and why the inequality check if (_counterUndo != 2) is needed in doWhenClickedUndo method. Is the times of undo operation limited in 2? How about the case of more steps the user wants to undo? To solve this issue, I tried to use Stack<DataTable> instead of List<DataTable> so that the Push, Pop and First methods is available (Stack is useful for maintaining the historical sequence like the states of DataTable here). The following code is as an example implementation with Stack class.

public partial class Form1 : Form
{
    Stack<DataTable> dtStack = new Stack<DataTable>();
    int RecordIndex = 0;
    bool UndoRedo = false;

    public Form1()
    {
        InitializeComponent();

        //    Construct Columns
        dataGridView1.ColumnCount = 1;
        dataGridView1.Columns(0).Name = "0";

        dataGridView1.Rows.Add(20);// Add row

        dtStack.Clear();

        dtStack.Push(GetDataTableFromDGV(dataGridView1));
        UpdateBtnStatus();
    }

    public DataTable GetDataTableFromDGV(DataGridView dgv)
    {
        var dt = new DataTable();

        foreach (DataGridViewColumn column in dgv.Columns)
        {
            dt.Columns.Add(column.Name);
        }

        object() cellValues = new object(dgv.Columns.Count);

        foreach (DataGridViewRow row in dgv.Rows)
        {
            for (int i = 0; i < row.Cells.Count; i++)
            {
                cellValues(i) = row.Cells(i).Value;
            }
            dt.Rows.Add(cellValues);
        }
        return dt;
    }
    
    public void datatablaToDataGrid(DataGridView dgv, DataTable datatable)
    {
        for (int i = 0; i < datatable.Rows.Count; i++)
        {
            for (int j = 0; j < datatable.Columns.Count; j++)
            {
                dgv.Rows(i).Cells(j).Value = datatable.Rows(i)(j).ToString();
            }
        }
    }

    private void UpdateBtnStatus()
    {
        if (RecordIndex == this.dtStack.Count - 1)
            this.btn_Undo.Enabled = false;
        else
            this.btn_Undo.Enabled = true;

        if (RecordIndex == 0)
            this.btn_redo.Enabled = false;
        else
            this.btn_redo.Enabled = true;
    }

    private void btn_Undo_Click(object sender, EventArgs e)
    {
        UndoRedo = true;
        datatablaToDataGrid(dataGridView1, dtStack.ToList()(++RecordIndex));
        UpdateBtnStatus();
        UndoRedo = false;
    }

    private void btn_redo_Click(object sender, EventArgs e)
    {
        UndoRedo = true;
        datatablaToDataGrid(dataGridView1, dtStack.ToList()(--RecordIndex));
        UpdateBtnStatus();
        UndoRedo = false;
    }

    private void dataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e)
    {
        if (UndoRedo)
            return;

        while (RecordIndex != 0)
        {
            dtStack.Pop();
            RecordIndex--;
        }

        DataGridView dgv = (DataGridView)sender;
        int r = e.RowIndex;
        int c = e.ColumnIndex;
        if (dgv.Rows(r).Cells(c).Value != null)
        {
            string dgvResult = dgv.Rows(r).Cells(c).Value.ToString();
            string dtResult = dtStack.First().Rows(r)(c).ToString();
            if (dgvResult != dtResult)
            {
                dtStack.Push(GetDataTableFromDGV(dataGridView1));
            }
        }
        UpdateBtnStatus();
    }
}

winforms – Recebendo strings do Arduino em C# (Visual Studio) – O problema da Thread

Estou escrevendo uma programação no Visual Studio (C# Windows Forms), onde o Arduino recebe comandos e efetua leituras, enviando tal resultado de volta ao PC para mostrar na tela ou gravar em arquivos texto. Para enviar pro serial do Arduino é uma facilidade incrível. Mas o retorno é uma complicação, como muitos de vocês sabem. Então, basicamente, no Arduino existe um

Serial.println(resultado);

E no Visual Studio há o problema da thread ser diferente, que não consigo entender:

   public Janela()
   {
    // Algum código aqui...
    conectorSerial = new SerialPort();
    conectorSerial.DataReceived += onDadoRecebido;
    // O resto do código...
    }

public delegate void DelegacaoSerial(string valor);  // ?????????

private void onDadoRecebido(object sender, SerialDataReceivedEventArgs e)
{
    string dadoRecebido = conectorSerial.ReadLine();
    Console.WriteLine(dadoRecebido);
    object() parametro = new object(1);
    parametro(0) = dadoRecebido;
    DelegacaoSerial delegado = new DelegacaoSerial(MostrarDados);
    this.BeginInvoke(delegado, parametro);
}

private void MostrarDados(string valor)
{
    txtLog.AppendText(valor); // A string que vem do Arduino só vai estar disponível aqui...
}

Minha questão é: existe uma forma de se ter tudo isso num método simples (ou mesmo agrupado em uma classe) que retorne a string enviada pelo Arduino e que possa ser reutilizado em todo o programa? Tipo assim:

string stringQueVeioDoArduino = RecebeString();

E daí eu posso pegar essa stringQueVeioDoArduino e fazer o que quiser dela… Teria como?

entity framework – C# Winforms App ,EF6, DB First with Auto Mapper Generic Repository and UOW context is not updated automatically when database is changed externally

I’ve started to work on a single user c# winforms application, with EF6 db first approach, AutoMapper, Generic Repository and UnitOfWork. They have been previously implemented by others former colleagues . I’m not very experienced with those concepts but I have read a lot of links.
The main issue is now that the single user c# app needs to be updated for multiuser environment. Using the current implementation , the external changes(like update operations) performed on database are not visible inside de controller.

I’ve tried using _unitOfWork.Context.Refresh(System.Data.Entity.Core.Objects.RefreshMode.StoreWins, _tableRepository.FindAllInContext()); to refresh the context but I think this is not a good option, because if I try to update a table column value after refresh, the action will not be saved in database.

 public interface IDbEntity
    {
        int Id { get; set; }
        bool IsDeleted { get; set; }
    }
 
 public interface IRepository<T, T1>
        where T : class, IDbEntity
        where T1 : class, IDbEntity
    {
        int Add(T1 newEntityViewModel);
        void AddRange(List<T1> newEntities);
        void Remove(int id);
        void RemoveFromDb(int id);
        List<T1> Find(Expression<Func<T1, bool>> predicate);
        T1 FindById(int id);
        List<T1> FindAll();
        T FindByIdInContext(int id);
        int GetNextId();
        List<T> FindAllInContext();
    }
    
    internal class DbRepository<T, T1> : IRepository<T, T1>
        where T : class, IDbEntity
        where T1 : class, IDbEntity
    {
        protected ObjectSet<T> _objectSet;
        protected List<T1> _internalList;
        protected ObjectContext _context;

        public DbRepository(ObjectContext context)
        {
            try
            {
                
                _internalList = new List<T1>();
                _objectSet = context.CreateObjectSet<T>();
                _context = context;
            }
            catch (Exception ex)
            {
                log.Error(ex.Message);
                throw;
            }
        }



        public int Add(T1 newEntityViewModel)
        {
            try
            {
                var entityDto = AutoMapperConfiguration.GetMapperConfiguration().Map<T1, T>(newEntityViewModel);
                _objectSet.AddObject(entityDto);

                _context.SaveChanges();
                
                //check id 
                return entityDto.Id;
            }
            catch (Exception ex)
            {
                log.Error(ex.Message);
                throw;
            }
        }


        public List<T1> Find(Expression<Func<T1, bool>> predicate)
        {
            try
            {
                var listT1 = AutoMapperConfiguration.GetMapperConfiguration().Map<List<T1>>(_objectSet.Where(q => !q.IsDeleted));
                var result = listT1.Where(predicate.Compile()).ToList();

                return result;
            }
            catch (Exception ex)
            {
               log.Error(ex.Message);
                throw;
            }
        }

        public List<T1> FindAll()
        {
            try
            {
                var listT1 = AutoMapperConfiguration.GetMapperConfiguration().Map<List<T1>>(_objectSet.Where(q => !q.IsDeleted));
                return listT1;
            }
            catch (Exception ex)
            {
                log.Error(ex.Message);
                throw;
            }
        }

    }
    
    
    public interface IUnitOfWork
    {
        IRepository<User, User_ViewModel> Users { get; }
        IRepository<Type, Type_ViewModel> Types { get; }
        
        /// and a lot more repositories

        ObjectContext Context { get; }
        void Commit();
    }
    
    
    internal class DbUnitOfWork : IUnitOfWork
    {
        private DbRepository<User, User_ViewModel> _users = null;
        private DbRepository<Type, Type_ViewModel> _types = null;
       
       
       
        private readonly ObjectContext _context;
        private readonly EntityConnection _connectionString;

   
        public ObjectContext Context { get { return _context; } }

        public DbUnitOfWork(EntityConnection connectionString)
        {
            try
            {
                _connectionString = connectionString;
                _context = new ObjectContext(connectionString, true);
                _context.ContextOptions.LazyLoadingEnabled = true;
            }
            catch (Exception ex)
            {
                log.Error(ex.Message);
                throw;
            }
        }

        public IRepository<User, User_ViewModel> Users
        {
            get
            {
                return _users ?? (_users = new DbRepository<User, User_ViewModel>(_context));
            }
        }


        public IRepository<Type, Type_ViewModel> Types
        {
            get
            {
                return _types ?? (_types = new DbRepository<Type, Type_ViewModel>(_context));
            }
        }



        public void Commit()
        {
            try
            {
               _context.SaveChanges();

            }
            catch (Exception ex)
            {
                log.Error(ex.Message);
                throw;
            }
        }

    }
    
    DbController.cs
    public partial class DbController
    {
        protected readonly IUnitOfWork _unitOfWork;
        
        protected readonly IRepository<User, User_ViewModel> _userRepository;
        protected readonly IRepository<Type, Type_ViewModel> _typeRepository;
        
        
        public SafeIOController(IUnitOfWork unitOfWork)
        {
           

            _unitOfWork = unitOfWork;
            
            _userRepository = _unitOfWork.Users;
            _typeRepository = _unitOfWork.Types;
            
        }

        public void Save()
        {
            _unitOfWork.Commit();
        }
    }
    Controller_User.cs
    public partial class DbController
    {
       

        public List<User_ViewModel> GetAllUsers()
        {
            try
            {
                
                return _userRepository.FindAll();

            }
            catch (Exception ex)
            {
                _exHandler.LogErrorMessage(Constants_Exception.DB_EXCEPTION_MSG, ex, _exHandler.GetCurrentMethod());
                throw;
            }
        }


        
    }
    
    and then in winforms app 
    
            _unitOfWork = new DbUnitOfWork(connectionString);
            _controller = new DbController(_unitOfWork);

How can I properly implement unitOfWork in order to have the latest information from db inside my context?

winforms – C#: Envio de dados para banco de dados (SqlCompact)

Boa tarde pessoal,
Estou iniciando agora com c# devido à necessidade aonde trabalho, peguei um projeto até que estava fluindo, porém, estou com grande dificuldade para enviar os dados para o banco de dados (uma parte do código outra pessoa que fez).

TotalRecordNum seria o total de testes, sendo assim peguei os testes por bytes (RecNum, Year, Month, Days, Hr, Min, EventBG, Bg e mid) e depois passo via parâmetro para o banco de dados.

Coloquei um if comentado dentro do for aonde se eu determino o valor de i ele me traz somente o dados de acordo com o id(TotalRecordNum) e ele salvar normalmente… mais gostaria de salvar todos os dados.

Agradeço desde já, qualquer ajuda, dica, luz que me derem…

public void RECRDecode(byte() RECR_Buf)
  {
       
       int RecNum, Year, Month, Days, Hr, Min, EventBG, BG, mid;

       TotalRecordNum = RECR_Buf(0) * 256 + RECR_Buf(1);

       for (TotalRecordNum = 0; TotalRecordNum < 1152; TotalRecordNum++)
       {
           if (RECR_Buf(0 + TotalRecordNum * 8) == 0xFF)
               break;
           if (RECR_Buf(1 + TotalRecordNum * 8) == 0x00)
               break;
       }

       for (int i = 0; i < TotalRecordNum; i++)
       {             
   
           //if (i == 0)
           //{                
               
               RecNum = TotalRecordNum - i;
               Year = (RECR_Buf(0 + i * 8) & 0xFE) >> 1;
               Month = (RECR_Buf(0 + i * 8) & 0x01) << 3 | (RECR_Buf(1 + i * 8) & 0xE0) >> 5;
               Days = RECR_Buf(1 + i * 8) & 0x1F;
               Hr = (RECR_Buf(2 + i * 8) & 0xF8) >> 3;
               Min = (RECR_Buf(2 + i * 8) & 0x07) << 3 | (RECR_Buf(3 + i * 8) & 0xE0) >> 5;
               EventBG = (RECR_Buf(5 + i * 8) & 0x03) << 1 | (RECR_Buf(6 + i * 8) & 0x80) >> 7;
               BG = (RECR_Buf(6 + i * 8) & 0x03) * 256 + RECR_Buf(7 + i * 8);
               mid = Mid1_SN;

               dadoGlicemia = BG.ToString("D2");
               dadoData += Year.ToString("D2") + "/" + Month.ToString("D2") + "/" + Days.ToString("D2");
               dadoHora += Hr.ToString("D2") + ":" + Min.ToString("D2");
               AutoSN += MID1.ToString("D5") + mid.ToString("D5");
               dadoID += RecNum.ToString("D2");
               dadoEvento += EventBG.ToString("D1");

               Paciente paciente = new Paciente();
               paciente.NO += dadoID.ToString();
               paciente.Glicemia += dadoGlicemia.ToString();

           //}              
       }

   }

c# – Getting data from database and present it on Winforms

Currently, I am working on this project where I need to achieve the following…

Get column named Category from MySQL database. And whatever the output is, check the specific radio button on winforms.

I’d like to see if I can improve it, or if there is a much easier way of achieving my goal:

Personally – i think there is too many if, else if statements…

Radio Buttons:

enter image description here

Code:

void function()
{
    try
    {
        using(var conn = new MySqlConnection(ConnectionString.ConnString))
        {
            string query = "select category from customer_complaints_actions where id = @id";

            conn.Open();
            using(var cmd = new MySqlCommand(query, conn))
            {
                cmd.Parameters.AddWithValue("@id", Convert.ToInt32(complaints_data.SelectedRows(0).Cells(0).Value.ToString()));
                using(MySqlDataReader read = cmd.ExecuteReader())
                {
                    while (read.Read())
                    {

                        // Categories
                        if ((read("category").ToString()) == "Retained Pitt/Shell")
                        {
                            Pitt_Shell.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Mineral Stone")
                        {
                            mineral_stone.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Extraneous Vegetable Matter")
                        {
                            vegetable_matter.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Paper/Cardboard")
                        {
                            paper_cardboard.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Wood")
                        {
                            wood.Checked = true;
                        }
                        else if ((read("category").ToString()) == "String")
                        {
                            _string.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Hair")
                        {
                            hair.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Rubber")
                        {
                            rubber.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Metal")
                        {
                            metal.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Other Foreign Body")
                        {
                            other_foreign_body.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Taste")
                        {
                            taste.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Texture")
                        {
                            texture.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Smell / Odour")
                        {
                            smell.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Appearance")
                        {
                            appearance.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Off / Mould")
                        {
                            off_mould.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Crystallised / Bloomed")
                        {
                            bloomed.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Insect Damage / Infestation")
                        {
                            infestation.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Other Organoleptic")
                        {
                            other_organoleptic.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Light Weight Pack")
                        {
                            light_weight_pack.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Product Caught in Seals")
                        {
                            product_caught_in_seal.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Shepcote Damage")
                        {
                            shepcote_damage.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Courier Damage")
                        {
                            courier_damage.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Incorrect Packaging / Label")
                        {
                            incorrect_pack_label.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Other Packing / Packaging")
                        {
                            other_pack.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Short Shelf Life")
                        {
                            short_shelf_life.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Out of Date")
                        {
                            out_of_date.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Picking Error")
                        {
                            picking_error.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Order Input Error")
                        {
                            order_input_error.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Customer Order Error / Change")
                        {
                            customer_order_error.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Delivery Issues (Wrong Location etc.)")
                        {
                            delivery_issues.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Other Order / Delivery")
                        {
                            other_delivery.Checked = true;
                        }
                        else if ((read("category").ToString()) == "Injury")
                        {
                            injury.Checked = true;
                        }

                    }
                    read.Close();
                    conn.Close();
                }
            }
        }
    }
    catch (Exception e)
    {
        MessageBox.Show(e.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }
}

Ajuda com Async C# / WinForms

boa dia!

Montei um pequeno projeto para estudo onde eu coleto dados de um site e jogo para um DataGridView usando o Selenium.
Tenho 3 Classes

Robot.cs -> Onde tenho o métodos de navegação e coleta de dados.

//NAVEGAR PARA O SITE(URL)
public void GoToUrl(string Url)
{
    RoboDriver.Navigate().GoToUrl(Url);
}
//PROCURAR POR XPATH LER E RETORNAR VALOR
public string ReadByXPath(string XPath, string attribute)
{
    string SetRead;
    Wait.Until(d => RoboDriver.FindElementByXPath(XPath));
    SetRead = RoboDriver.FindElementByXPath(XPath).GetAttribute(attribute);
    return SetRead;
}

RobotNavigation.cs -> Responsável pela navegação.

        //METODO PARA BUSCAR E PREENCHER AS COTAÇÕES DO DATAGRIDVIEW
    public void GetQuotes(DataGridView dataGridView, ProgressBar progressBar)
    {
        //ZERAR BARRA DE PROGRESSO
        progressBar.Value = 0;
        //DEFININDO VALOR DA BARRA DE PROGRESSO
        progressBar.Maximum = dataGridView.RowCount;
        //PERCORRER REGISTROS DO DATAGRIDVIEW
        foreach (DataGridViewRow row in dataGridView.Rows)
        {
            //TRAVAR DATAGRIDVIEW
            dataGridView.AllowUserToAddRows = false;
            string codActive = row.Cells(0).Value.ToString();
            //MONTAR URL DE NAVEGAÇÃO COM CÓDIGO OBTIDO
            string url = "https://www.fundamentus.com.br/detalhes.php?papel=" + codActive;
            //NAVEGAR PARA SITE (URL)
            GoToUrl(url);
            //PREENCHER COLUNA DO DATAGRIDVIEW COM A COTAÇÃO OBTIDA NO SITE
            row.Cells(1).Value = ReadByXPath("/html/body/div(1)/div(2)/table(1)/tbody/tr(1)/td(4)/span", "innerHTML");
            //INCREMENTAR BARRA DE PROGRESSO
            progressBar.PerformStep();
        }
        //FECHAR ROBO
        RobotQuit();
        //HABILITAR DATAGRIDVIEW
        dataGridView.AllowUserToAddRows = true;
    }
}

Form1.cs -> Onde executo a navegação através de um botão.

        private void bntPlay_Click(object sender, EventArgs e)
    {
        RobotNavigation robotNavigation = new RobotNavigation();
        robotNavigation.GetQuotes(dgvMain, pBar);
    }

Gostaria de uma ajuda para tornar esse projeto assíncrono para que o form e os componentes não travem enquanto o robo navega, coleta dados e trabalha com os componentes passados via parâmetro.

winforms – How to separate “unmanaged” and “managed” code in my C++ project

C++/CLI allows to mix managed and unmanaged Code within the same DLL/EXE (“assembly”). In laymans terms, a “managed” class starts with the ref class keyword, an unmanaged class is introduced without the ref keyword.

In such a scenario, you usually implement your program using (at least) three layers:

  • an unmanaged layer which contains the core algorithms

  • an UI layer, probably written in C#, since the WinForms designer works best with that language

  • an intermediate managed C++/CLI layer as a “middleman” which connects the former two, and provides a full managed API for the UI to the unmanaged layer.

That way, your unmanaged layer will benefit from the full optimization capabilites of the C++ compiler (as long as you can avoid to call back any managed functions from within the performance critical sections of your program).

If your “unmanaged layer” is part of the same assembly where the managed C++/CLI code is placed, or if you place it in a separate static lib or dll file does usually not make a big difference for the performance (at least, in my experience).

windows forms – Formulario en negro al salirse de la pantalla C# WinForms

Muy buenas noches comunidad de programadores,

Mi inconveniente sucede cuando el tamaño del formulario se expande y este se sale de la pantalla visible se pone de color negro. Dejo imagen como referencia y el codigo que estoy utilizando.

Imagen de la Aplicacion

Timer que expande el formulario:

    private void timerAbout_Tick(object sender, EventArgs e)
    {
        Size = new Size(Width + 8, Height);
        formAboutIsOpen = 1;
        if (Size.Width == 1394)
        {
            timerAbout.Stop();
            timerAbout.Dispose();
        }
    }

Agradezco las respuestas constructivas y en buena onda!