PictureBox Error - BrokenRule


Author
Message
Ivan George Borges
Ivan George Borges
Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)
Group: StrataFrame MVPs
Posts: 1.9K, Visits: 21K
Opa, Rogério, valeu pelas palavras.

Quanto ao local para checar seu Error Provider, não precisa ser no Click de seu menu, você pode capturar o SeuForm.AfterSave, por exemplo, ou o BusinessRulesChecked.

Rogerio Mauri
Rogerio Mauri
StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)
Group: StrataFrame Users
Posts: 205, Visits: 629
Ok...

Não analisei o código fonte do StrataFrame, mas, pelo visto, a limpeza dos alertas de erros é seletiva então. Se utilizar SetErrorProvider terei que forçar a limpeza.

Beleza... farei uma análise no código fonte do StrataFrame para entender como e em que ponto a limpeza é feita. Apenas não gostei de colocar a chamada de limpeza no método de click do item de menu. Não me pareceu muito sensato.

Valeu e, mais uma vez, obrigado...

------------------------

Trent...

Solved problem. The support in Brazil is the best.Wink

Rogério Mauri Smile



Ivan George Borges
Ivan George Borges
Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)
Group: StrataFrame MVPs
Posts: 1.9K, Visits: 21K
OK, entendi.

Bom, eu acho que se você está usando SetErrorProvider() manualmente para mostrar um erro, parece bastante sensato que tenha que usar um ClearErrorProvider() para se desfazer do mesmo. Inclusive, se você não quiser limpar todos os erros de uma vez com o ClearErrorProvider(), pode usar o SetErrorProvider() direto no controle:

Me.SetErrorProvider(Me.TextBox1, String.Empty)

Rogerio Mauri
Rogerio Mauri
StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)
Group: StrataFrame Users
Posts: 205, Visits: 629
Ivan... Boa Noite...

Identifiquei que o problema não está relacionado com o campo tipo imagem, mas sim a qualquer campo onde o BindingField não é utilizado para popular o seu conteúdo.

Por exemplo... Considere a situação onde no banco de dados um campo 'tempo' está sendo arquivado como minutos e, na tela, tenho que converter esses minutos em dois campos distintos, um para as horas e outro para os minutos.

Navegando nos registros do BO um método para popular os campos convertidos é invocado.

        /// <summary>
        /// Lendo dados do BO
        /// </summary>
        private void PopulaCampos()
        {

            //-- TempoExcedenteDiurno1 horas e minutos
            this.nudTempoExcedenteDiurno1H.Value = tbHorarioPersonalizadoBO1.TempoExcedenteDiurno1Horas;
            this.nudTempoExcedenteDiurno1M.Value = tbHorarioPersonalizadoBO1.TempoExcedenteDiurno1Minutos;

            //-- TempoExcedenteDiurno2 horas e minutos
            this.nudTempoExcedenteDiurno2H.Value = tbHorarioPersonalizadoBO1.TempoExcedenteDiurno2Horas;
            this.nudTempoExcedenteDiurno2M.Value = tbHorarioPersonalizadoBO1.TempoExcedenteDiurno2Minutos;

            //-- TempoExcedenteDiurno3 horas e minutos
            this.nudTempoExcedenteDiurno3H.Value = tbHorarioPersonalizadoBO1.TempoExcedenteDiurno3Horas;
            this.nudTempoExcedenteDiurno3M.Value = tbHorarioPersonalizadoBO1.TempoExcedenteDiurno3Minutos;

        }

Então, ao salvar o registro o BO faz a crítica dos campos correspondentes. Se há erro preciso tratá-los para redirecionar o ícone do erro para esses campos, pois eles não estão ligados aos campos do BO via BindingField. Se não fizer isso, o usuário não fica sabendo qual campo está com erro. O código para isso:

        private void tbHorarioPersonalizadoBO1_CheckRulesOnCurrentRow(CheckRulesEventArgs e)
        {

            foreach (BrokenRule loRule in tbHorarioPersonalizadoBO1.BrokenRules.ToArray())
            {
                if (loRule.FieldName.EndsWith("TempoExcedenteDiurno2", StringComparison.OrdinalIgnoreCase))
                    SetErrorProvider(nudTempoExcedenteDiurno2M, loRule.Description);
                if (loRule.FieldName.EndsWith("TempoExcedenteDiurno3", StringComparison.OrdinalIgnoreCase))
            }
           
        }

Se há erro, beleza... O ícone do erro aparece na tela. No entanto, ao clicar em [Desfazer] e mesmo após isso, navegando nos registros, o ícone de alerta do erro permanece sobre o campo.

Para resolver isso, tive que forçar um "CleanErrorProvider()" quando o usuário pressiona um item do menu que não seja o botão Salvar. Veja o código abaixo:

        private void MaintenanceFormToolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            if (e.ClickedItem.ToString().ToUpper() != "SALVAR")
                ClearErrorProvider();
        }

Não acho que essa seja a maneira mais adequada de tratar isso. BigGrin 



Rogério Mauri Smile

Ivan George Borges
Ivan George Borges
Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)Strategic Support Team Member (3.5K reputation)
Group: StrataFrame MVPs
Posts: 1.9K, Visits: 21K
Hi Rogerio.

I haven't been able to reproduce an error on a picturebox, or maybe I didn't understand how you are getting it. One thing that might help is for you to use a Try... Catch command to get your picture, something like this:

        '-- Establish locals
        Dim loDialog As New OpenFileDialog()
        Dim loImage As System.Drawing.Image

        '-- Set the properties on the dialog
        loDialog.Multiselect = False
        loDialog.Filter = "Images(*.bmp,*.jpg,*.png,*.gif)|*.bmp;*.jpg;*.png;*.gif"

        '-- Show the dialog
        If loDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
            Try
                '-- Try to open the image
                loImage = System.Drawing.Image.FromFile(loDialog.FileName)

                '-- Set the image on the record, if you want to
                Me.MyBO1.myb_Picture = CType(loImage, System.Drawing.Bitmap)

                '-- Set the picture box as well
                Me.PictureBox1.Image = loImage
            Catch ex As Exception
                '-- take care of the exception, if you need
            End Try
        End If

Let me know if it helps. Wink

PS: caso você não tenha pego a idéia em inglês, dá um toque e eu traduzo.

Rogerio Mauri
Rogerio Mauri
StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)
Group: StrataFrame Users
Posts: 205, Visits: 629
Ivan... Vou precisar do seu habilidoso inglês.

No caso em tela quando há um erro na captura de uma imagem o ícone de alerta é exibido no campo tipo PictureBox, como em qualquer outro campo textbox, por exemplo. O que ocorre é que após cancelar a inclusão, ou mesmo após a correção do problema, o ícone de alerta de erro (seta) fica aparecendo sobre o campo PictureBox.

Abraços...

Rogério Mauri Smile



Trent Taylor
Trent Taylor
StrataFrame Developer (10K reputation)StrataFrame Developer (10K reputation)StrataFrame Developer (10K reputation)StrataFrame Developer (10K reputation)StrataFrame Developer (10K reputation)StrataFrame Developer (10K reputation)StrataFrame Developer (10K reputation)StrataFrame Developer (10K reputation)StrataFrame Developer (10K reputation)
Group: StrataFrame Developers
Posts: 6.6K, Visits: 6.9K
I'm sorry, I don't quite understand your scenario.  I see that you have a broken rule bound to your image, but I don't understand what you mean in regards to cancellation or how to setup the scenario you are running into.  I will need more details to offer any advice.
Rogerio Mauri
Rogerio Mauri
StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)StrataFrame User (303 reputation)
Group: StrataFrame Users
Posts: 205, Visits: 629
Hi...

PictureBox is fixing the error icon after cancellation.



Rogério Mauri Smile



GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Similar Topics

Reading This Topic

Login

Explore
Messages
Mentions
Search