Supongamos que creamos un widget de Gtk que deseamos poner en una ventana, pero que en algún evento del mismo se cierre la ventana madre.
En este caso usaremos un Event Handler para que la ventana madre se suscriba al mismo.
Para lograrlo se pueden seguir los siguientes pasos:
1.- Definimos el EventHandler en el control hijo.
public event EventHandler Closing;
2.- La clase madre debe suscribirse al mismo.
por ejemplo:
MainWindow win = new MainWindow();
win.Closing += new EventHandler(OnDeleteEvent);
pero como en nuestro caso es un widget omitiremos la parte de la creación del widget.
el código quedaría así:
this.pdfviewerwidget2.Closing += new EventHandler(OnDeleteEvent);
4.-Al cerrar el widget revisar el evento y activarlo:
private void btnClose_Clicked (object sender, EventArgs e)
{
if (Closing != null) {
Closing (this, new EventArgs ());
}
this.Destroy();
}
5.- Ahora; creamos el método que se activará al cerrar el control hijo en la clase madre:
public void OnDeleteEvent(object sender, EventArgs args)
{
this.Destroy ();
}
Y esto es todo lo necesario, ahora en cuanto cerremos en el botón hijo se active el botón Close, se activará el evento OnDeleteEvent en la clase madre.
jueves, 14 de abril de 2016
martes, 5 de abril de 2016
Cambiar el ancho de las Scrollbars en Gtk
Para cambiar el ancho de las scrollbars de Gtk2 es necesario editar los archivos de configuración del tema actual; para esto es necesario editar el archive gtkrc localizado en el folder gtk-2.0 del tema usualmente localizado en /usr/share/themes.
La variable a cambiar es: GtkRange::slider_width
Si desea tambien cambiar el tamaño de las flechas en los extremos de la Scrollbar la variable es GtkRange::stepper_size
La variable a cambiar es: GtkRange::slider_width
Si desea tambien cambiar el tamaño de las flechas en los extremos de la Scrollbar la variable es GtkRange::stepper_size
Comprimir y descomprimir archivos con el comando tar
Para comprimir archivos
tar zcvf <archivo> <Fuente(s)>
Para descomprimir archivos
tar zxvf <archivo>
tar zcvf <archivo> <Fuente(s)>
Para descomprimir archivos
tar zxvf <archivo>
Modificar el tamaño de un disco virtual fijo en virtualbox
Es posible modificar el tamaño de un disco virtual fijo clonando el disco a un disco de VirtualBox "estándar" siguiendo los siguientes pasos.
- Clonar el disco actual a uno nuevo con el siguiente comando:
- Cambiar el tamaño del Nuevo disco con el siguiente comando:
- Luego hay que modificar la definición de la máquina virtual para usar el Nuevo disco en lugar del primero.
- Dependiendo del sistema operativo es necesario modificar la partición para usar el espacio agregado.
martes, 15 de marzo de 2016
Usar la ConnectionString en el archivo machine.config de mono
Para usar un archivo de configuración semejante al app.config o web.config de .NET en windows es posible agregarlo al archivo machine.config que existe en /etc/mono/<Version de Mono> de manera similar a como lo usamos en los archivos de configuración en Windows.
viernes, 12 de febrero de 2016
Como guardar información de configuración de una aplicación WinForms
Como guardar información de configuración de una aplicación WinForms
Cuando necesitamos guardar información de configuración de nuestra aplicación; ya sea de Windows o de Consola, podemos hacerlo en la configuración de la aplicación.
Visual Studio nos proporciona una manera muy fácil de hacerlo; para hacerlo es necesario ir a las propiedades de la aplicación, seleccionar la sección de Settings y agregar la información deseada.
Para leer este dato se puede hacer de la siguiente manera:
myVariable = Properties.Settings.Default["MiPropiedad"].ToString();
Si deseamos actualizarla se hace de la siguiente manera:
Properties.Settings.Default["MiPropiedad"] = "AlgunValor";
Properties.Settings.Default.Save();
NOTA: Si en el alcance (scope) de la propiedad seleccionamos Application este valor será de solo lectura.
Cuando necesitamos guardar información de configuración de nuestra aplicación; ya sea de Windows o de Consola, podemos hacerlo en la configuración de la aplicación.
Visual Studio nos proporciona una manera muy fácil de hacerlo; para hacerlo es necesario ir a las propiedades de la aplicación, seleccionar la sección de Settings y agregar la información deseada.
Para leer este dato se puede hacer de la siguiente manera:
myVariable = Properties.Settings.Default["MiPropiedad"].ToString();
Si deseamos actualizarla se hace de la siguiente manera:
Properties.Settings.Default["MiPropiedad"] = "AlgunValor";
Properties.Settings.Default.Save();
NOTA: Si en el alcance (scope) de la propiedad seleccionamos Application este valor será de solo lectura.
lunes, 1 de febrero de 2016
Extender una clase con c# 3.0
A veces es necesario agregar nueva funcionalidad a una clase y no deseamos modificar el código de esa clase; ya sea porque no tenemos acceso al código fuente o porque no deseamos tocar algo que ya funciona.
Con c# 3.0 estas clases se pueden extender; para hacerlo es necesario hacer lo siguiente:
-Agregar una clase estática con un método estático. El primer parámetro de la "nueva clase" se agrega automáticamente, pero es necesario marcarlo con la palabra this. cuando esta clase es creada dicho objeto es pasado automáticamente al método.
De esta manera el método agregado en la clase extensora aparece en el intellisense del objeto original.
Ejemplo:
Si tenemos una clase Customer y deseamos agregarle un método para renombrar el nombre del cliente la clase quedaría de la siguiente manera:
public static class CustomerExtender
{
public static void ChangeName(this Customer cust, String newName)
{
cust.Name = newName;
}
}
Donde el parámetro cust es el objeto Customer original. De esta manera podemos usar el siguiente código:
Customer customer = new Customer("Smart");
customer.ChangeName("Walmart");
customer.Save();
¡Como si el método ChangeName existiera en la clase original!.
Con c# 3.0 estas clases se pueden extender; para hacerlo es necesario hacer lo siguiente:
-Agregar una clase estática con un método estático. El primer parámetro de la "nueva clase" se agrega automáticamente, pero es necesario marcarlo con la palabra this. cuando esta clase es creada dicho objeto es pasado automáticamente al método.
De esta manera el método agregado en la clase extensora aparece en el intellisense del objeto original.
Ejemplo:
Si tenemos una clase Customer y deseamos agregarle un método para renombrar el nombre del cliente la clase quedaría de la siguiente manera:
public static class CustomerExtender
{
public static void ChangeName(this Customer cust, String newName)
{
cust.Name = newName;
}
}
Donde el parámetro cust es el objeto Customer original. De esta manera podemos usar el siguiente código:
Customer customer = new Customer("Smart");
customer.ChangeName("Walmart");
customer.Save();
¡Como si el método ChangeName existiera en la clase original!.
viernes, 15 de enero de 2016
Mostrar un Loading Panel al cargar y al procesar los datos que consuman mucho tiempo de proceso
Primero hay que crear el Panel como en el siguiente ejemplo:
<dx:ASPxLoadingPanel ID="loadingPanel" ClientInstanceName="loadingPanel" runat="server" Modal="true"
Width="70%" Height="30px" Text="Se está procesando su petición; por favor no abandone la sesión porque podría tener inconsistencia en sus datos..." >
</dx:ASPxLoadingPanel>
Crear una función con Javascript que muestre el panel :
function showLoadingPanel() {
loadingPanel.Show();
}
Si se desea que solo muestre el panel encima de un control como el ASPxGridview se puede usar el método ShowInElementByID del Panel:
function showLoadingPanel() {
loadingPanel.ShowInElementByID(grvHarnessItems.name);
}
Crear una función con Javascript que esconda el panel:
function OnControlsInitialized(s, e) {
setTimeout(function () {
loadingPanel.Hide();
}, 1000);
}
Mostrar el panel al inicio de la página si esta tiene que cargar muchos datos y se tardará más de 2 segundos. (Creo que es buena práctica hacer que las consultas a la base de datos consuman menos de 2 segundos, pero si esto no es posible recomiendo mostrar el panel):
<script type="text/javascript">
showLoadingPanel();
</script>
Mostrar el panel al presionar cada botón que vaya a efectuar una tarea que consuma más de 2 segundos, llamando al método que muestra el Panel, usando el método Click del lado del cliente:
<dx:ASPxButton ID="btnSave" runat="server" OnClick="btnSave_Click"
Text="Grabar" Width="120px" style="display:inline-block;">
<ClientSideEvents Click="function(s, e) {
showLoadingPanel();
}" />
<Image Url="~/Content/Images/Save.png" Width="24px">
</Image>
</dx:ASPxButton>
Usar el objeto ASPxGlobalEvents para detectar cuando todos los controles han sido inicializados y esconder el Panel con la función creada para tal evento:
<dx:ASPxGlobalEvents ID="ge" runat="server">
<ClientSideEvents ControlsInitialized="OnControlsInitialized" />
</dx:ASPxGlobalEvents>
<dx:ASPxLoadingPanel ID="loadingPanel" ClientInstanceName="loadingPanel" runat="server" Modal="true"
Width="70%" Height="30px" Text="Se está procesando su petición; por favor no abandone la sesión porque podría tener inconsistencia en sus datos..." >
</dx:ASPxLoadingPanel>
Crear una función con Javascript que muestre el panel :
function showLoadingPanel() {
loadingPanel.Show();
}
Si se desea que solo muestre el panel encima de un control como el ASPxGridview se puede usar el método ShowInElementByID del Panel:
function showLoadingPanel() {
loadingPanel.ShowInElementByID(grvHarnessItems.name);
}
Crear una función con Javascript que esconda el panel:
function OnControlsInitialized(s, e) {
setTimeout(function () {
loadingPanel.Hide();
}, 1000);
}
Mostrar el panel al inicio de la página si esta tiene que cargar muchos datos y se tardará más de 2 segundos. (Creo que es buena práctica hacer que las consultas a la base de datos consuman menos de 2 segundos, pero si esto no es posible recomiendo mostrar el panel):
<script type="text/javascript">
showLoadingPanel();
</script>
Mostrar el panel al presionar cada botón que vaya a efectuar una tarea que consuma más de 2 segundos, llamando al método que muestra el Panel, usando el método Click del lado del cliente:
<dx:ASPxButton ID="btnSave" runat="server" OnClick="btnSave_Click"
Text="Grabar" Width="120px" style="display:inline-block;">
<ClientSideEvents Click="function(s, e) {
showLoadingPanel();
}" />
<Image Url="~/Content/Images/Save.png" Width="24px">
</Image>
</dx:ASPxButton>
Usar el objeto ASPxGlobalEvents para detectar cuando todos los controles han sido inicializados y esconder el Panel con la función creada para tal evento:
<dx:ASPxGlobalEvents ID="ge" runat="server">
<ClientSideEvents ControlsInitialized="OnControlsInitialized" />
</dx:ASPxGlobalEvents>
Suscribirse a:
Comentarios (Atom)
Mover mensajes seleccionados a un personal folder en Oulook 2016
Este es un ejemplo de como mover los mensajes seleccionados a un personal folder (pst) en Outlook 2016 usando VBA. Sub MoveInbox() Mov...
-
A continuación les muestro un ejemplo de como eliminar los registros repetidos de una DataTable . //DataTable con los reqistros repetidos...
-
Problemas con Aplicaciones Web Las aplicaciones web son sin estado, lo que significa que una vez una página web es enviada desde servidor, ...
-
Primero hay que crear el Panel como en el siguiente ejemplo: <dx:ASPxLoadingPanel ID="loadingPanel" ClientInstanceName=...