Erro estranho no método

17/04/2012

Pessoal, bom dia. Eu tenho um WebForm, que plota um gráfico e funciona bem. Eu fiz tudo no form, porque precisava o mais rápido fazer uma amostra para saber se aprovam ou não o projeto. Bem, resolvido essa e aprovado, agora vou melhorar o código. Uma das coisas que fiz, foi criar uma classe genérica e comum para montar algumas coisas, como o cabeçãlho do gráfico, as chamadas a banco e deixar limpo as páginas que irão mostrar os gráficos, ou seja, ir fazendo as chamadas a essas classes, carregando os devidos métodos e tendo o resultado final esperado. Acontece que um métod que criei para montar o cabeçalho, está dando erro e copiei tudo da página que funciona, inclusive todos os USINGs. Abaixo o cabeçalho e a linha onde o erro aparece e mais abixo o erro.

public void MontaChart(int altura, int largura)

{


//Cria o objeto Chart, base de todos os gráficos

RadChart radChart = new RadChart();

radChart.ChartTitle.TextBlock.Text = CABEÇALHO;



//Muda a cor de fundo do gráfico para transparente

radChart.Appearance.FillStyle.FillType = Telerik.Charting.Styles.FillType.Solid;

radChart.Appearance.FillStyle.MainColor = System.Drawing.Color.Transparent;

radChart.PlotArea.Appearance.FillStyle.FillType = Telerik.Charting.Styles.FillType.Solid;

radChart.PlotArea.Appearance.FillStyle.MainColor = System.Drawing.Color.Transparent;



this.Controls.Add(radChart);//Aqui aparece o erro, em cima de Controls



............... // Mais comandos aqui

}


Esse é o erro:

ProjetoBanco.UI.Web.Graficos.ControlsCharts does not contain a definition for Controls and no extension method Controls accepting a first argument of type ProjetoBanco.UI.Web.Graficos.ControlsCharts could be found (are you missing a using directive or an assembly reference?)

Pjava

Respostas

17/04/2012

Joel Rodrigues

Na linha
this.Controls.Add(radChart);
você tenta adicionar o chart à classe que você está codificando. Na página funcionava pois você adicionava direto ao form, que suporta esse método.
Ao usar a palavra reservada THIS, você refere-se ao objeto dentro do qual se está escrevendo, no caso, sua classe.
Adapte seu código, adicionando o radChart ao form.

Boa sorte.
Responder Citar

17/04/2012

Pjava

Entendi mas não compreendi. Adicionar o chart ao Form, me desculpe, mas não entendi, ou melhor, como assim?
Responder Citar

17/04/2012

Joel Rodrigues

Você usava esse código onde? Se era dentro de um form, por exemplo, você deve usar meuForm.Controls.Add ao invés de this.Controls.Add.

O que eu quis dizer foi: com o this.Controls.Add você está tentando adicionar aos controles do seu objeto, que no caso, a sua classe não possui a propriedade Controls. Como você quer adicionar em algum outro lugar, tem que referenciá-lo, por exemplo,meuForm.Controls.Add.

Deu pra sacar?
Responder Citar

17/04/2012

Pjava

Saquei sim, valeu. É que tem muita coisa nova pra mim o C#, mas aos poucos chegamos lá e a melhor forma é essa, fazendo e um baita de um projeto. Tenho mais dúvidas, em relação a isso. Eu estou vindo do Delphi, então é muita coisa nova pra mim. Por exemplo, eu estou fazendo um biblioteca de métodos para serem reutilizados ao longo do projeto. Eu tenho um namespace, onde estão uns forms. Eu não posso setar diretamente o Form, mas sim passar uma referência pra ele. O que passa é o tipo. Qual tipo? Tentei Form, mas deu erro. Quanto a usa dica, funcionou legal. Obrigado.
Responder Citar

17/04/2012

Joel Rodrigues

Bom, não sei se entendi bem sua pergunta, mas vou tentar dar um exemplo. Suponha um método bem simples apenas exibe um form com dimensões pré-definidas.
Observe o código:
public void AbrirTela(Form f)
{
f.Height = 600;
f.Width = 800;
f.ShowDialog();
}


Agora eu quero usar esse form na minha tela principal, abrindo uma segunda tela (de cadastro, por exemplo). Observe:
using(frmCadastro frm = new frmCadastro())
AbrirTela(frm);


Essa é uma forma de fazer.
Qualquer dúvida, é só falar.
Responder Citar

17/04/2012

Pjava

Então, o problema é que quando eu ponho um Argumento em meu método do tipo Form, dá erro. Ele não está aceitando o argumento com esse tipo(Form). Até aí entendi e é mais ou menos isso mesmo, até fiz, mas não aceita o tipo Form. O que devo acrescentar? Já adicionei todos os using que achei ser necessário.
Responder Citar

17/04/2012

Joel Rodrigues

Bom, primeiramente uma dica: não diga apenas que ocorreu um erro, cite qual foi.

Então, você está desenvolvendo essa aplicação em ASP.NET? Se for, você não pode fazer referência à classe Form, pois esta é para aplicações Windows Forms. Qual é exatamente sua necessidade?
Responder Citar

17/04/2012

Pjava

Meu projeto é web.
Responder Citar

18/04/2012

Joel Rodrigues

A classe a qual pertencem os web forms é a Page, contida no namespace System.Web.UI.
Teste aí.
Responder Citar

18/04/2012

Pjava

Não testei ainda, mas não deu mais o erro. Era isso mesmo. Valeu pela dica e muito obrigado. Vejo que você manja de C#.
Responder Citar