Autor
|
Tema: Boton favorito de Mozilla Firefox y otras cosas (Leído 16,235 veces)
|
TickTack
Desconectado
Mensajes: 434
CipherX
|
Hola Elektro, pero solo me pasaba cuando cambie el control WebBrowser por el control WebBrowserExtended. Si yo en esto: public partial class WBrowser : Form { public static String favXml = "favorits.xml", linksXml = "links.xml"; String settingsXml="settings.xml", historyXml="history.xml"; List<String> urls = new List<String>(); XmlDocument settings = new XmlDocument(); String homePage; CultureInfo currentCulture;
public WBrowser() { InitializeComponent(); currentCulture = CultureInfo.CurrentCulture; }
Le agrego solamente esto: public partial class WBrowser : Form { public static String favXml = "favorits.xml", linksXml = "links.xml"; String settingsXml="settings.xml", historyXml="history.xml"; List<String> urls = new List<String>(); XmlDocument settings = new XmlDocument(); String homePage; CultureInfo currentCulture;
public WBrowser() { InitializeComponent(); this.Shown += this.WBrowser_Shown; currentCulture = CultureInfo.CurrentCulture; }
Me aparece el error CS1061, que seria: C# does not contain a definition for and no extension method accepting a first argument of type could be found (are you missing a using directive or an assembly reference? Necesito eso en mi caso:? this.Shown += this.WBrowser_Shown; Porque el Formulario se muestra cuando le doy click a iniciar. Gracias y saludos
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
Necesito eso en mi caso:?
this.Shown += this.WBrowser_Shown; Vamos a ver, TickTack, ¿me estás diciendo que te intentas asociar al evento Form.Shown para hacer lo que yo hago en el código que te mostré?, entonces básicamente me estás preguntando qué si esto es necesario?: namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { this.InitializeComponent(); this.Shown += this.Form1_Shown; this.webBrowserExtended1.DocumentMouseDown += this.WebBrowserExtended1_DocumentMouseDown; } private void Form1_Shown(object sender, EventArgs e) { // Cargo una página web aleatoria... this.webBrowserExtended1.Navigate("http://foro.elhacker.net/"); }
No, no es necesario, y esta asociación de evento this.Shown += this.WBrowser_Shown; en tu caso no hay motivo para hacerlo. Como puedes ver a simple vista yo solo me subscribo al evento Form.Shown para navegar hacia esta url: this.webBrowserExtended1.Navigate("http://foro.elhacker.net/");
...y así poder demostrar el funcionamiento de la clase ExtendedWebBrowser en el resto del código de esa clase Form1. ¡Saludos!
|
|
« Última modificación: 4 Mayo 2017, 21:04 pm por Eleкtro »
|
En línea
|
|
|
|
TickTack
Desconectado
Mensajes: 434
CipherX
|
Hola Elektro, mira, el codigo que me pasaste: private void WebBrowserExtended1_DocumentMouseDown(object sender, HtmlElementEventArgs e) { // Creo una referencia corta de nuestro WebBrowser. WebBrowserExtended wb = (WebBrowserExtended)sender; switch (e.MouseButtonsPressed) { // El botón central del ratón se ha pulsado. case MouseButtons.Middle: // Obtengo el elemento Html que esté situadio en las coordenadas actuales del puntero del ratón. HtmlElement element = wb.Document.GetElementFromPoint(e.ClientMousePosition); // Comprobación de seguridad. if (element != null) { // Obtengo el atributo href que contiene la url destino. // Nótese que esto no funcionará con todo tipo de elementos, // eso requiere una implementación/análisis/parsing más sofisticado sobre el elemento obtenido, y no es mi tarea hacer eso, // pero esta metodología cubre la gran mayoría, que es lo que importa para poder extender este ejemplo funcional. string url = element.GetAttribute("href"); // Comprobación de seguridad. if (!string.IsNullOrWhiteSpace(url)) { Uri uri = null; // Antes de hacer nada más, compruebo que la url es realmente una url válida. if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out uri)) { // Desactivo temporálmente la navegación de este WebBrowser; // esto es como decirle: "no hagas nada, que yo me encargo de controlar el evento del ratón". wb.AllowNavigation = false; // Finálmente, aquí podemos hacer lo que queramos con la url obtenida. Por ejemplo: Otro_WebBrowser.Navigate(uri); } else { // La supuesta url no tiene una sintaxis válida. // Se puede ignorar, o controlar y considerarlo como error. } // uri } // url } // element break; default: // Si se ha pulsado un botón distinto al botón central del ratón, // entonces habilito la navegación del WebBrowser para que controle el evento y navegue a la nueva url. wb.AllowNavigation = true; break; } }
De donde sacaste eso:? if (!string.IsNullOrWhiteSpace(url)) Porque me dice string no tiene una deficion IsNullOrWhiteSpace. Gracias y saludos
|
|
|
En línea
|
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
De donde sacaste eso:?
if (!string.IsNullOrWhiteSpace(url)) Es uno de los miembros built-in más básicos y útiles que se debe aprender en la programación .NET.
Porque me dice string no tiene una deficion IsNullOrWhiteSpace. Por que probablemente estás compilando a la versión 3.5 o inferior de .NET Framework (¿o tal vez 4.0 Compact?) y por ende no se puede encontrar esa función, puesto que la función String.IsNullOrWhiteSpace() se implementó en la versión 4.0 de .NET Framework. Tienes varias formas de solucionarlo, la primera y más sencilla (y la más compatible) sería cambiar la versión objetivo de .NET Framework (a la versión 4.0 o superior) en las propiedades de tu proyecto. O sino, siempre puedes utilizar la función String.IsNullOrEmpty() en su lugar, aunque esto no aporta la misma capa de seguridad. También puedes implementar tu propia función IsNullOrWhiteSpace, puedes buscar ejemplos en Google.
Ya has probado el codigo en tu Visual Studio? ¿Tú me ves alguien capaz de compartir un código y decir que funciona, sin haberlo probado y verificar que realmente es funcional?. Los problemas que tienes son por inexperiencia/falta de comprensión, no por mi culpa. Estás cometiendo un error garrafal. Para empezar, todo eso que acabas de decir y de la forma en la que lo has dicho es un completo sin sentido, ¿entiendes lo que es una referencia, una propiedad, la librería mscorlib.dll y el papel que ésta juega en el CLR de .NET Framework?, por que para hablarme de esa manera primero deberías cerciorarte de lo que hablas. Te pones a intentar culpar y cuestionar a alguien que solo intenta ayudarte... ¿por el mero hecho de que algo no te funcione, y criticándome por haber cometido supuestos errores?. Evidentemente podría haber tenido un error (que no es el caso), por que no soy perfecto, pero en tal caso creo que habría otras formas de comunicármelo, ¿no?. Mira, antes de decir tonterías sin sentido, en lugar de eso mejor deberías limitarte a preguntar " ¿por qué esto no me funciona?", y así yo te puedo explicar cual es el fallo sin hacerme enfadar. Al principio de este comentario ya te he explicado por qué te ocurre lo que te ocurre, y te he explicado también como lo puedes solucionar, eso es todo lo que necesitas saber. Saludos.
|
|
« Última modificación: 5 Mayo 2017, 17:42 pm por Eleкtro »
|
En línea
|
|
|
|
TickTack
Desconectado
Mensajes: 434
CipherX
|
Hola Elektro, Los problemas que tienes son por inexperiencia/falta de comprensión, no por mi culpa.
Por supuesto que si. Estás cometiendo un error garrafal. Para empezar, todo eso que acabas de decir y de la forma en la que lo has dicho es un completo sin sentido, ¿entiendes lo que es una referencia, una propiedad, la librería mscorlib.dll y el papel que ésta juega en el CLR de .NET Framework?
En cuanto a saber lo que es una referencia, una propiedad y la libreria mscorlib.dll, si, si se lo que es. En cuanto al papel que estos juegan en el CLR de .NET Framework, no, no se que papel juegan. Es mas, no se que es CLR. Y tampoco se a lo que te refieres con .NET Framework. por que para hablarme de esa manera primero deberías cerciorarte de lo que hablas.
Te pones a intentar culpar y cuestionar a alguien que solo intenta ayudarte... ¿por el mero hecho de que algo no te funcione, y criticándome por haber cometido supuestos errores?. Evidentemente podría haber tenido un error (que no es el caso), por que no soy perfecto, pero en tal caso creo que habría otras formas de comunicármelo, ¿no?. Mira, antes de decir tonterías sin sentido, en lugar de eso mejor deberías limitarte a preguntar "¿por qué esto no me funciona?", y así yo te puedo explicar cual es el fallo sin hacerme enfadar.
Al principio de este comentario ya te he explicado por qué te ocurre lo que te ocurre, y te he explicado también como lo puedes solucionar, eso es todo lo que necesitas saber.
Bueno. El hecho de que te pregunte de donde sacaste eso me dices que te ofendi, que te critique, que te dije que tu eres el culpable? Si te hubiera dicho: "De donde sacaste este mier**, que no funciona?". Eso si que seria ofenderte. Yo dije: "Pero que cono?". Te sientes ofendido por eso? Porque no comprendo algo? Nota que no escribi: "Pero que cono hiciste?". Es mas, mira: deberías limitarte a preguntar "¿por qué esto no me funciona?
No fue eso lo que hice? Porque me dice string no tiene una deficion IsNullOrWhiteSpace.
Amigo. No te sientas ofendido. Quiza mi manera de expresarme te dio la impresion de querer ofenderte. Ahora Los problemas que tienes son por inexperiencia/falta de comprensión, no por mi culpa.
por que para hablarme de esa manera primero deberías cerciorarte de lo que hablas.
Mira, antes de decir tonterías sin sentido
No soy yo, mas bien, el que tiene razon para estar enfadado, y que, sin embargo, no lo estoy? Sin agregar que podria arriesgarme a ser baneado? Bueno. Hice el metodo de IsNullOrWhiteSpace: public static bool IsNullOrWhiteSpace(string value) { if (value != null) { for (int i = 0; i < value.Length; i++) { if (!char.IsWhiteSpace(value[i])) { return false; } } } return true; }
Modifique un poco el codigo que me pasaste: private void WebBrowserExtended1_DocumentMouseDown(object sender, HtmlElementEventArgs e) { // Creo una referencia corta de nuestro WebBrowser. WebBrowserExtended wb = (WebBrowserExtended)sender; switch (e.MouseButtonsPressed) { // El botón central del ratón se ha pulsado. case MouseButtons.Middle: // Obtengo el elemento Html que esté situadio en las coordenadas actuales del puntero del ratón. HtmlElement element = wb.Document.GetElementFromPoint(e.ClientMousePosition); // Comprobación de seguridad. if (element != null) { // Obtengo el atributo href que contiene la url destino. // Nótese que esto no funcionará con todo tipo de elementos, // eso requiere una implementación/análisis/parsing más sofisticado sobre el elemento obtenido, y no es mi tarea hacer eso, // pero esta metodología cubre la gran mayoría, que es lo que importa para poder extender este ejemplo funcional. string url = element.GetAttribute("href"); // Comprobación de seguridad. if (!WBrowser.IsNullOrWhiteSpace(url)) { Uri uri = null; // Antes de hacer nada más, compruebo que la url es realmente una url válida. if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out uri)) { // Desactivo temporálmente la navegación de este WebBrowser; // esto es como decirle: "no hagas nada, que yo me encargo de controlar el evento del ratón". wb.AllowNavigation = false; // Finálmente, aquí podemos hacer lo que queramos con la url obtenida. Por ejemplo: addNewTab(); getCurrentBrowser().Navigate(uri); } else { // La supuesta url no tiene una sintaxis válida. // Se puede ignorar, o controlar y considerarlo como error. } // uri } // url } // element break; default: // Si se ha pulsado un botón distinto al botón central del ratón, // entonces habilito la navegación del WebBrowser para que controle el evento y navegue a la nueva url. wb.AllowNavigation = true; break; } }
Como vez, le puse esto: addNewTab(); getCurrentBrowser().Navigate(uri);
Esto seria abrir una nueva Tab y abrir la URL. Pero realmente no funciona. Visual Studio no me da error. Mi navegador se carga satisfactoriamente. Pero el codigo no me funciona. Por supuesto, seguramente hice algo mal. Porque tu dijiste que lo probaste. Tienes alguna idea que error hice esta vuelta de nuevo. O escribi una cosa que no tiene sentido de vuelta? No lo digo ironicamente. Yo aprendi a no enfandarme. Por favor dime. Para que tenga la posibilidad de mejorarme en el futuro. Gracias y saludos PD.: Perdon por los malentendidos.
|
|
« Última modificación: 6 Mayo 2017, 11:10 am por Eleкtro »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
Pero realmente no funciona. Visual Studio no me da error. Mi navegador se carga satisfactoriamente. Pero el codigo no me funciona. No puedo saber que significa "no funciona" si no das más detalles. ¿Has comprobado si el bloque de código del controlador WebBrowserExtended1_DocumentMouseDown se llega a ejecutar?. He probado el código con tu implementación de la función String.IsNullOrWhiteSpace, con las modificaciones que le has hecho al controlador de evento WebBrowserExtended1_DocumentMouseDown, y en mi caso funciona, así que lo único que se me ocurre es que no hallas asociado el evento WebBrowserExtended.DocumentMouseDown... this.WebBrowserExtended1.DocumentMouseDown += this.WebBrowserExtended1_DocumentMouseDown;
Saludos
|
|
« Última modificación: 6 Mayo 2017, 11:27 am por Eleкtro »
|
En línea
|
|
|
|
TickTack
Desconectado
Mensajes: 434
CipherX
|
Hola Elektro,
si asocio el evento WebBrowserExtended.DocumentMouseDown me da el siguiente error:
WBrowser does not contain a definition for WebBrowserExtendedd1 and no WebBrowserExtended1 extension method accepting a first argument of type WebBrowser could be found (are you missing a using directive or an assembly reference?)
Gracias y saludos
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
No debería haberte mostrado ningún código por que no ha servido de nada si no comprendes como utilizarlo, debería haberme limitado a decirte que lo que debes hacer antes que nada es leer un tutorial básico de C# hasta que aprendas a manejar conceptos básicos como instancias de clase, objetos/referencias y eventos. Podriamos estar así un siglo explicándote cada intento fallido de hacerlo funcionar, pero no me apetece explicar más, lo siento, por que para utilizar un código en el que basicamente solo hay que copiar y pegar para testearlo, le estás dando 2.000 vueltas de forma complicada por no comprender como se puede usar. Y para colmo luego me culpas a mi de que no te vaya por "estar haciendo las cosas mal", cuando yo no hice nada mal en ese código, pero bueno, no volveré a ese tema...
WBrowser does not contain a definition for WebBrowserExtendedd1 and no WebBrowserExtended1 extension method accepting a first argument of type WebBrowser could be found (are you missing a using directive or an assembly reference?) Veamos, te explico, pero esto será lo último que te explicaré en este post: Para asociar un evento expuesto en una clase, primero debes crear una instancia de la clase, en este caso sería una instancia de la clase/control WebBrowserExtended, entonces declaras un objeto para mantener una referencia de esa clase, y le pones el nombre que quieras al objeto. ¿Y cómo se hace todo eso?, pues así: WebBrowserExtended miObjeto = new WebBrowserExtended ();
Y entonces, teniendo la referencia, ya puedes asociar el evento WebBrowserExtended.DocumentMouseDown al controlador de evento, que en este caso se llama WebBrowserExtended1_DocumentMouseDown: this.miObjeto.DocumentMouseDown += this.WebBrowserExtended1_DocumentMouseDown;
Y todo esto que acabo de explicar se puede resumir y hacer de un modo muy distinto e igual de sencillo: debes reemplazar las instancias del control WebBrowser por WebBrowserExtended en tu clase del diseñador, XXXX.Designer.cs. Desde el principio no ha tenido más misterio lo que debes hacer, tan solo en tu código reemplaza el uso del WebBrowser por el nuevo control WebBrowserExtended, como te llevo diciendo desde un principio, y luego asociar el evento WebBrowserExtended.DocumentMouseDown donde implementarías la funcionalidad de obtener la url... cosa que ya te mostré como hacerlo en otro ejemplo. Saludos.
|
|
« Última modificación: 6 Mayo 2017, 14:54 pm por Eleкtro »
|
En línea
|
|
|
|
TickTack
Desconectado
Mensajes: 434
CipherX
|
No debería haberte mostrado ningún código por que no ha servido de nada si no comprendes como utilizarlo, debería haberme limitado a decirte que lo que debes hacer antes que nada es leer un tutorial básico de C# hasta que aprendas a manejar conceptos básicos como instancias de clase, objetos/referencias y eventos.
Podriamos estar así un siglo explicándote cada intento fallido de hacerlo funcionar, pero no me apetece explicar más, lo siento, por que para utilizar un código en el que basicamente solo hay que copiar y pegar para testearlo, le estás dando 2.000 vueltas de forma complicada por no comprender como se puede usar. Y para colmo luego me culpas a mi de que no te vaya por "estar haciendo las cosas mal", cuando yo no hice nada mal en ese código, pero bueno, no volveré a ese tema...
Joder. A la mier** con C#. A la mier** con todo realmente. Si no queres o te has cansado o estas incontento de que no te pagan entonces no me ayudes NUNCA MAS. Aqui nadie te dijo que me ayudaras. Ademas felicitarte que hayas llegado hasta aqui. Ya que realmente ningun admnistrador llega hasta aqui. Normalmente los admins son orgullosos de una forma negativa. Se creen los intocables. Ya deja de responder entonces mis posts. Deja que otro que no se queje ni sea tan hibersensible como tu me ayude. A menos que esto haya sido realmente fuerte para ti te lleve a que me banees o que me hagas otro cosa desagradante.
|
|
« Última modificación: 6 Mayo 2017, 20:15 pm por TickTack »
|
En línea
|
|
|
|
|
|