none
Dúvida sobre a classe Screen RRS feed

  • Pergunta

  • Olá pessoal!

    Estou fazendo uma aplicação do tipo WebSite na qual seria interessante, ou melhor, seria muito importante para mim, identificar a resolução de tela do usuário para certos fins, acho que não há a necessidade de explicar o porquê de precisar disso...

    Sei que consigo através classe Screen, até pesquisei e ví uma aplicação que faz mais ou menos o que almejo... Entretanto a classe Screen pertence ao namespace System.Windows.Forms...

    Minha dúvida então é: Consigo utilizar a classe Screen na minha aplicação asp.Net, ou se eu utilizar o namespace System.Windows.Forms poderei ter problemas na minha aplicação?

    Caso eu utilíze-a e venha a ter problemas, existe uma maneira de eu conseguir a resolução de tela do usuário de outra forma?

    Qualquer ajuda é bem vinda, desde já agradeço a todos.

    Até mais, abraços.
    quarta-feira, 20 de julho de 2011 13:54

Respostas

  • Olá Jefferson, creio eu que implementar a classe Screen no ASP.NET nao vai acabar interagindo com o cliente, como o Windows.FOrm interage diretamente com o cliente isso é possível, fiz aqui uma maneira de conseguir a resolução da pessoa via JavaScript, pois apenas rodando no cliente posso saber qual a resolução atual.

    Obs.: Utilize o JQuery para atribuir o valor aos label, só adaptar com a sua necessidade, segue abaixo:
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title>Untitled Page</title>
    
      <!-- Importando Jquery-->
      <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
    
      <script language="application/javascript" type="text/javascript"> 
      function GetResolution(){
        var width = screen.width;
        var height = screen.height;
    
        //Atribuindo valor ao controlecom JQuery
        $(document).ready(function()
          {
            $("#lblWidth").text('W: ' + width);
            $("#lblHeight").text('H: ' + height);
          }
        );  
      } 
      </script>
    
    </head>
    <body onload="GetResolution();">
      <form id="form1" runat="server">
      <div>
        <asp:Label ID="lblWidth" runat="server"></asp:Label>
        <br />
        <asp:Label ID="lblHeight" runat="server"></asp:Label>
      </div>
      </form>
    </body>
    </html>
    
    

     
    Vitor Mendes | Seu feedback é muito importante para todos!
    • Marcado como Resposta Jefferson Alan quarta-feira, 20 de julho de 2011 15:45
    • Não Marcado como Resposta Jefferson Alan quarta-feira, 20 de julho de 2011 16:11
    • Marcado como Resposta Jefferson Alan quinta-feira, 21 de julho de 2011 13:07
    quarta-feira, 20 de julho de 2011 15:18
  • Bom dia Jefferson, obteve exito com os códigos postado acima ?? não desista cara, pode postar suas duvidas ou problemas, vamos tenta resolver isso junto, faça o seguinte la no meu primeiro post eu coloquei um código que deu certo, crie um novo projeto para teste e aplique aquele solução, me diga se funcionou ou não.
    Vitor Mendes | Seu feedback é muito importante para todos!
    • Marcado como Resposta Jefferson Alan quinta-feira, 21 de julho de 2011 13:07
    quinta-feira, 21 de julho de 2011 12:04

Todas as Respostas

  • Olá Jefferson, creio eu que implementar a classe Screen no ASP.NET nao vai acabar interagindo com o cliente, como o Windows.FOrm interage diretamente com o cliente isso é possível, fiz aqui uma maneira de conseguir a resolução da pessoa via JavaScript, pois apenas rodando no cliente posso saber qual a resolução atual.

    Obs.: Utilize o JQuery para atribuir o valor aos label, só adaptar com a sua necessidade, segue abaixo:
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title>Untitled Page</title>
    
      <!-- Importando Jquery-->
      <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
    
      <script language="application/javascript" type="text/javascript"> 
      function GetResolution(){
        var width = screen.width;
        var height = screen.height;
    
        //Atribuindo valor ao controlecom JQuery
        $(document).ready(function()
          {
            $("#lblWidth").text('W: ' + width);
            $("#lblHeight").text('H: ' + height);
          }
        );  
      } 
      </script>
    
    </head>
    <body onload="GetResolution();">
      <form id="form1" runat="server">
      <div>
        <asp:Label ID="lblWidth" runat="server"></asp:Label>
        <br />
        <asp:Label ID="lblHeight" runat="server"></asp:Label>
      </div>
      </form>
    </body>
    </html>
    
    

     
    Vitor Mendes | Seu feedback é muito importante para todos!
    • Marcado como Resposta Jefferson Alan quarta-feira, 20 de julho de 2011 15:45
    • Não Marcado como Resposta Jefferson Alan quarta-feira, 20 de julho de 2011 16:11
    • Marcado como Resposta Jefferson Alan quinta-feira, 21 de julho de 2011 13:07
    quarta-feira, 20 de julho de 2011 15:18
  • Olá Vitor!

    Muito obrigado era o que eu precisava...

    E sem querer ainda me ensinou outra coisa, como chamar componentes asp em JavaScript [eu não sabia]...

    Muito obrigado.
    quarta-feira, 20 de julho de 2011 15:45
  • Olá Vitor!

    Desculpe-me, marquei como resposta sem antes testar, é que fui firme que daria certo, mas infelizmente não deu...

    A forma como estou fazendo é mais ou menos assim:

    Tenho uma MasterPage e um formulário que herda dela...
    No Source do formulário tenho um ContentPlaceHolder, meu header, onde coloquei o script que me passou, e outro onde coloco meu conteúdo, acho que você já sabia disso, né?

    Dentro do meu conteúdo coloquei duas Labels como sugerido... Mas se no próprio Source, no evento OnLoad da Label eu colocar: GetResolution();, me dá o erro: "Termo de expressão inválido )'".
    Para contornar isso então, no método Load da página eu coloqeui:

    lblWidth.Attributes.Add("OnLoad", "GetResolution();");

    Não recebo mais o erro, entretanto também não me aparece nada...

    Coloquei o <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
    antes do meu script... Preciso instalar JQuery? Não entendo sobre ela...

    De qualquer forma, obrigado.

    Até mais, abraços.
    quarta-feira, 20 de julho de 2011 16:26
  • Jefferson simulei o seu erro aqui e consegui achar uma solução, utilize-a, vou explicar a causa, como você esta utilizando uma Master Parge e herdando em um Web Content Form, quando sua pagina é renderizada pelo .net, ele muda o nomes dos controles que estão de dentro do seu ContentPlaceHolder, no final oque era lblWidth, depois de renderizado vai ficar com o nome de ctl00_ContentPlaceHolder1_lblWidth, bem diferente do que você colocou em seu JavaScript, ou seja ele não consegue encontrar o controle, outra dica é de como atribuir o JavaScript a sua pagina, utilize o Page.ClientScript.RegisterStartupScript, ao invés de atribuir o javascript como atributo ao Label, você pode colocar direto na pagina em tempo de execução, segue abaixo como ficou a solução que deu certo aqui:


    Coloque isso no seu Page_Load()
    this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "onload", "<script type=\"text/javascript\">GetResolution();</script>");
    
    Ao invés de:
    lblWidth.Attributes.Add("OnLoad", "GetResolution();");
    

    Segue código abaixo da pagina herdada:
    <%@ Page Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs"
     Inherits="WebApplication3.WebForm1" Title="Untitled Page" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
     <!-- Importando Jquery-->
    
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
    
     <script language="application/javascript" type="text/javascript"> 
     function GetResolution(){
     var width = screen.width;
     var height = screen.height;
    
     //Atribuindo valor ao controlecom JQuery
     $(document).ready(function()
      {
      $("#<%= lblWidth.ClientID %>").text('W: ' + width);
      $("#<%= lblHeight.ClientID %>").text('H: ' + height);
      }
     ); 
     } 
     </script>
    
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
     <asp:Label ID="lblWidth" runat="server"></asp:Label>
     <br />
     <asp:Label ID="lblHeight" runat="server"></asp:Label>
    </asp:Content>
    
    

    Invés de eu procurar o o controle apenas pelo nome, estou procurando agora pelo ClientID, que é unico e cada controle
    Antigo método:
    "#lblWidth"

    Novo:
    "#<%= lblWidth.ClientID %>"
     

    Quanto ao Jquery você acessa essa URL e baixa o Jquery e coloca na sua aplicação, como se fosse um .js mesmo, depois chamar na sua pagina, espero que tenha entendido, e te aconselho estudar um pouco de JQuery, que na verdade é um Framework de JavaScript, ele é muito potente.

    Referencias:
    http://stackoverflow.com/questions/1905716/clientscript-registerclientscriptblock 
    Vitor Mendes | Seu feedback é muito importante para todos!

    quarta-feira, 20 de julho de 2011 17:46
  • Vitor,

    por favor, perdoe minha ignorância...

    Primeiramente fiz como sugeriu, entretanto sem o JQuery, pois, estou criando uma aplicação do tipo WebSite...

    Quando adiciono uma referência ao AjaxControlToolkit.dll por exemplo, nesse tipo de aplicação ele vai automaticamente para a pasta bin, mas não posso adicionar jquery.js como referência pois ele não é uma .dll...

    Então, ao invés de adicioná-lo como referência, copiei-o diretamente para a pasta bin e executei, mas nada aconteceu... Como medida desesperada então, copiei o arquivo para todas as pastas e[kkk], não funcionou...

    Meus problemas estão todos loucos... Estou tendo um problema muito chato com o FTP... Infelizmente o que você me passou não funcionou... Agora a pouco coloquei um método no Load da página e ele não executou, colquei um BreakPoint no load para ir debugando e[...], simplesmente não estava entrando no load, nem quando dava PostBack, tive que praticamente refazer a página, agora ele entra no load... Só falta o problema estar no meu Visual Studio... Se Deus quiser, isso não, hê, hê!

    Mas[...] obrigado mesmo assim, valeu o esforço!


    Até mais, abraços.
    quarta-feira, 20 de julho de 2011 18:47
  • Bom dia Jefferson, obteve exito com os códigos postado acima ?? não desista cara, pode postar suas duvidas ou problemas, vamos tenta resolver isso junto, faça o seguinte la no meu primeiro post eu coloquei um código que deu certo, crie um novo projeto para teste e aplique aquele solução, me diga se funcionou ou não.
    Vitor Mendes | Seu feedback é muito importante para todos!
    • Marcado como Resposta Jefferson Alan quinta-feira, 21 de julho de 2011 13:07
    quinta-feira, 21 de julho de 2011 12:04
  • Olá Vitor!


    Primeiramente, desculpe a demora em te responder, e segundamente (se é que essa palavra existe (acho que você já deve estar cansado de ouvir isso né? rss)), muitíssimo obrigado por me ajudar, obrigado mesmo...

    Como você sugeriu, criei uma nova aplicação, dessa vez como Asp.Net Web Application e não como um WebSite, e simplesmente funcionou, tudo certinho...

    Tentei ainda de algumas outras formas no WebSite, mas sem sucesso... Não entendí o porquê, se fiz exatamente igual, exceto pelo fato de ser outro tipo de projeto, talvez deve ser por isso... Mas vou me esforçar mais um pouco e tentar implementar no meu projeto WebSite mesmo, se não tiver jeito, vou ter que simplesmente criar outro projeto... Só mais algumas horinhas reconstruindo o projeto e programando[kkk]...

    Mas muito obrigado, me ajudou muitissississíssimo mesmo, muitas vezes, ver pelos olhos dos outros nos faz enxergar muito melhor...

    E cara... Desistitir... JAMAIS!

    Até mais, abraços!

    ______________________________________________________________________________________________________________________________________________


    Só para complementar...

    Testei na WebSite novamente, não estava funcionando...

    Criei uma página em branco e tentei novamente, aí sim, fomos surpreendidos novamente... Funcionou!

    O problema de mudar os nomes dos componentes ainda deviam estar ocorrendo, Vitor, quando tratava as páginas dentro de uma MasterPage, mesmo com a última verificação que você me passou...

    Criei então, no mesmo projeto uma página em branco, que é executada rapidamente, sem a MasterPage, onde executo o Script que me passsou, pego os valores e guardo-os em uma Session...

    Tudo OK, 100%!

    Obrigado Vitor!
    • Editado Jefferson Alan quinta-feira, 21 de julho de 2011 13:37 Explicar a forma de resolver
    quinta-feira, 21 de julho de 2011 13:07