Array
(
)

Erro estranho no método

Pjava
   - 17 abr 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?)

Joel Rodrigues
   - 17 abr 2012

Na linha #Código

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.

Pjava
   - 17 abr 2012

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

Joel Rodrigues
   - 17 abr 2012

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?

Pjava
   - 17 abr 2012

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.

Joel Rodrigues
   - 17 abr 2012

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:
#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:
#Código
using(frmCadastro frm = new frmCadastro())
AbrirTela(frm);


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

Pjava
   - 17 abr 2012

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.

Joel Rodrigues
   - 17 abr 2012

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?

Pjava
   - 17 abr 2012

Meu projeto é web.

Joel Rodrigues
   - 18 abr 2012

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

Pjava
   - 18 abr 2012

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#.