none
Como personalizar um contextmenustrip em um webbrowser? RRS feed

  • Pergunta

  • Olá, preciso de ajuda para fazer o seguinte:

    tenho 2 componentes, um webbrowser e um contextmenustrip..

    No visualstudio eu vinculei o contextmenustrip no webbrowser, sempre que clico com botao direito no webbrowser ao inves de abrir o menu do internet explorer, ele abre o meu personalizado..

    So que eu preciso que ele pegue uma informação precisa dentro da pagina do webbrowser no local exato que foi clicado:

    Por exemplo, dentro do webrowser na pagina tem um botao:

    <input type=button value="valor do button">

    Tem como eu fazer que quando clicar com botao direito em cima do button, o menu do contextmenustrip pegue o valor dessa input, e repasse pra uma variavel no c# ?

    segunda-feira, 28 de setembro de 2015 08:28

Respostas

  • Para pegar pegar os atributos pode usar o GetAttribute, mais isso é  para site especifico ou qualquer um, se for especifico sera mais fácil, mais se for qualquer um site vai ter que manjar muito de javascript e manipulação de elementos.

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    • Sugerido como Resposta Marcos SJ sexta-feira, 2 de outubro de 2015 18:24
    • Marcado como Resposta Marcos SJ segunda-feira, 5 de outubro de 2015 12:10
    sexta-feira, 2 de outubro de 2015 12:55

Todas as Respostas

  • Olá An XY,

    Você quer o código para fazer isso?

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 28 de setembro de 2015 13:49
  • Sim, pois não consegui encontrar como fazer.

    Vou explicar melhor o que eu preciso.

    Preciso criar um button no input dentro do html do webbrowser como eu disse la em cima.

    Ai quando clicar com botao direito do mouse sobre esse button, ele vai abrir o menu contextstrip e pegar dado especifico dentro do html e repassar pro c#

    segunda-feira, 28 de setembro de 2015 16:32
  • Bem, talvez o que eu quero mesmo é que um button dentro do webbrowser faça alguma ação no software fora do webbrowser.

    Quando clicar com botao direito no button dentro do webbrowser, ele vai capturar um dado, especifico, onde dentro do webbrowser vai ter varios buttons, eu preciso que ele capture essa informacao do button clicado e atraves dela, eu irei executar uma funcao atraves do menu contextstrip.

    Que no caso seria o seguinte; Pegaria o nome de um usuario no webbrowser, poderia bloquear ele, adicionar como amigo etc. algo assim.

    • Editado An XY terça-feira, 29 de setembro de 2015 03:27 explicar melhor
    terça-feira, 29 de setembro de 2015 00:44
  • Olá An XY,

    O Fórum não pode ser utilizado para este tipo de solicitação. Caso esteja tendo algum problema/erro causado pela linguagem, aí sim é um caso em que o fórum pode auxiliar.

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta Marcos SJ terça-feira, 29 de setembro de 2015 17:56
    • Não Marcado como Resposta Marcos SJ quarta-feira, 30 de setembro de 2015 14:09
    terça-feira, 29 de setembro de 2015 13:40
  • Ué, mas então como buscar uma informação tão complexa? Não encontro nada do tipo na internet, e eu preciso fazer essa implementação..

    Nao posso perguntar se existe uma propriedade em um componente? e.e

    Se for o caso me recomenda algum fórum de perguntas e respostas que eu possa perguntar isso? Esse foi o unico que encontrei...

    Ou eu vou ficar na mão pq ninguém sabe como fazer?

    terça-feira, 29 de setembro de 2015 20:50
  • Entendo, mas minha pergunta foi se você quer que alguém simplesmente te passe o código. Então levei isso em consideração.

    O objetivo do fórum não é o de  ensinar os usuários a programar, se não for o seu caso então expresse melhor o tipo de ajuda que você precisa. O Fórum MSDN não é o local adequado para ensinar a programar ou passar código pronto.

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 30 de setembro de 2015 14:09
  • Então, Marcos o que esta acontecendo é o seguinte:

    tenho um webbrowser2, e coloquei um contextmenustrip nele, fiz uma action pra quando alguem clicar no context menu strip, executar alguma ação, o problema é que nas ações da linguagem c# eu não encontrei nenhuma função que seja capaz de capturar o value de um button clicado, quando se esta usando contextmenustrip.

    Sei que a intenção do forum não é ensinar a programar, mas esse nivel da minha pergunta é demasiadamente complexo, e ja pesquisei pra tudo enquanto é canto da internet e não tem nada similar que funcine, por isso eu tentei perguntar aqui. A minha duvida nao inflinge em querer um codigo pronto nao, so quero saber que funcao eu devo usar?

    Ja olhei tambem em sites onde tem as funções descritas do webbrowser e não encontrei nenhuma que faça o que eu preciso. Por isso minha pergunta, eu nao estou pedindo codigo pronto, eu estou pedindo uma informação se é possivel ou nao eu fazer isso que eu quero fazer, pq em delphi é possivel, pois o software que eu me baseio é feito em delphi e la eles conseguem interagir com o browser com um menu personalizado.

    Então vou fazer uma pergunta?

    Pq existe o context menu strip num webbrowser se o mesmo nao consegue fazer nada no conteúdo do mesmo?


    • Editado An XY quinta-feira, 1 de outubro de 2015 16:53 ..
    quinta-feira, 1 de outubro de 2015 16:52
  • Ok, vou pesquisar a respeito e assim que encontrar alguma informação útil postarei aqui.

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 1 de outubro de 2015 17:47
  • Para pegar pegar os atributos pode usar o GetAttribute, mais isso é  para site especifico ou qualquer um, se for especifico sera mais fácil, mais se for qualquer um site vai ter que manjar muito de javascript e manipulação de elementos.

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    • Sugerido como Resposta Marcos SJ sexta-feira, 2 de outubro de 2015 18:24
    • Marcado como Resposta Marcos SJ segunda-feira, 5 de outubro de 2015 12:10
    sexta-feira, 2 de outubro de 2015 12:55
  • Descobri uma gambiarra num site que funcionou em partes, ainda falta algumas coisas pra ficar do jeito que eu quero:

    primeiro acrescentei:

    using System.Runtime.InteropServices;

    depois dentro da classe:

     [ComVisible(true)]

    depois criei uma classe assim, que copiei dum site:

                                                                                             

    public class ScriptManager
            {
    private Form2 mForm;

    public ScriptManager(Form2 form)
                {
    mForm = form;
                }

    public void MethodToCallFromScript(string argumento)
                {
    mForm.DoSomething(argumento);
                }


            }

            public void DoSomething(string argumento)

            {
    MessageBox.Show(argumento);
            }

    No construtor do windows form coloquei:

    webBrowser2.ObjectForScripting = new ScriptManager(this);

    Ai foi so por no html o iframe <iframe src='#' name='nulo' style='width:0px; height:0px; visibility:hidden;'> e nos locais onde quero enviar a informação eu faço: <a href="#" target="nulo" onclick="window.external.MethodToCallFromScript('informação a ser passada');">Informação a ser clicada</a>

    Assim eu consegui fazer um MessageBox abrir com a informação que está ali, agora falta implementar para abrir o menucontext ao inves disso. Vou fazer mais testes.

    terça-feira, 6 de outubro de 2015 08:31
  • Essa seria uma segunda opção de como interagir com funções C# dentro de paginas

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    terça-feira, 6 de outubro de 2015 14:33
  • Eu ainda fiz uma mudança, ao inves de um iframe, e toda a trabalheira com os links, eu tive alguns problemas por causa da cor dos links, então passei a usar um label com o onclick.

    E finalizando tambem fiz o mesmo metodo com oncontextmenu, assim quando clica com botao direito ou esquerdo tem diferenças, ai eu envio um bool pra dentro da função que diz se for true, é o botao direito, se for false é o botao esquerdo, ai faço um if, e se for, pego a posição do mouse, e abro o context menu strip que eu queria, e gravo as informações do browser que vem juntos com o oncontextmenu, para variaveis globais.

    Ta funcionando perfeitamente agora.

    quarta-feira, 7 de outubro de 2015 05:01
  • Muito bom

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quarta-feira, 7 de outubro de 2015 17:50