valores valor una retorna regresan referencia real que multiples metodo funciones funcion devuelven devuelve devolver devolución con c# wpf excel radio-button

c# - una - funciones que regresan un valor



C#- ¿Cómo puedo devolver por separado los valores int de cada GroupBox de radio? (2)

Permítame aclarar mi situación y enfoque.

Tengo un archivo de Excel con 10 columnas. Las primeras cinco columnas tienen datos que forman las condiciones para la consulta, mientras que las últimas cinco columnas contienen datos que forman el resultado.

Estoy tratando de hacer un software con estos datos en una base de datos o excel (si la base de datos es difícil) donde las primeras cinco columnas estarán vinculadas a una lista o menú o actualmente RadioButtons en cinco grupos diferentes. Cuando se realizan las selecciones y se presiona el botón ENVIAR, el resultado se mostrará como cinco datos de filas coincidentes en Excel o la base de datos.

Eso es lo que intento lograr.

Comente si mi enfoque es incorrecto. Gracias de antemano por todas las publicaciones.

-------------------------- Pregunta original ---------------------- ------

Tengo 5 groupboxes (1 tiene 5 botones de radio, 2 tiene 3, 3 y 4 tiene 11, y 5 tiene 4) en un WPF. Con base en qué botón de radio se selecciona de cada groupBox, se espera que el software dé salida a cuatro parámetros (desde un CSV o una base de datos)

He usado ¿Cómo obtengo el botón de opción marcado en un cuadro de grupo? el código de esto dado por King King, y lo modifiqué para usar para mi propósito.

var checkedRadio = new []{groupBox1, groupBox2, groupBox3, groupBox4, groupBox5}.SelectMany(g=>g.Controls.OfType<RadioButton>().Where(r=>r.Checked)); foreach(var c in checkedRadio) MessageBox.Show(c.Name);

Lo que esto me da son los botones de radio seleccionados uno tras otro como cuadro de mensaje.

Quiero agradecerle a King King, y a los muchos otros (más de 20) cuyas respuestas por varias respuestas me ayudaron a llegar a este punto.

Donde estoy atascado es cómo usar el ciclo foreach para asignar valores a cinco int por separado y luego usarlo para calcular un valor int final que puedo asignar a varios resultados que quiero mostrar.

Traté de asignar valores a int en cada controlador de evento CheckedChanged, pero todos ellos son privados y no devuelven nada. Traté de cambiarlos para devolverlos, pero parece que no puedo romper esa tuerca.

Estoy seguro de que todo mi enfoque podría estar mal aquí, pero no tengo mucha idea en esto.

// Lo que básicamente quiero es dar opciones en g = cinco grupos y, en base a las selecciones de estos cinco grupos (columnas en un Excel), mostrar los resultados de 4 columnas correspondientes en la fila correspondiente en una base de datos. Mi enfoque actual anterior es una solución ya que no tengo conocimiento de trabajar con bases de datos.//


Creo que debería omitir la asignación de valores a cinco int s separados , pero calcule el valor resultante. Por ejemplo, codifiquemos groupBox s por bits y calculemos una máscara de bits

groupBox1 - 00001 (let it be checked) groupBox2 - 00010 groupBox3 - 00100 (let it be checked) groupBox4 - 01000 (let it be checked) groupBox5 - 10000 ----------------- mask 01101 (13)

entonces si se groupBox1 , groupBox3 y groupBox4 , la máscara final será 01101

var result = new [] {groupBox1, groupBox2, groupBox3, groupBox4, groupBox5} .Select((box, index) => new { box = box, mask = 1 << index }) .Where(item => item.box.Controls .OfType<RadioButton>() .Any(button => button.Checked)) .Sum(item => item.mask);

En caso de que tenga que usar pesos arbitrarios organícelos en una colección , por ej., Matriz

double[] weights = new double[] {1.2, 3.58, 4.62, -1.7, 0.9}; double result = new [] {groupBox1, groupBox2, groupBox3, groupBox4, groupBox5} .Select((box, index) => new { box = box, weight = weights[index] } .Where(item => item.box.Controls .OfType<RadioButton>() .Any(button => button.Checked)) .Sum(item => item.weight);

El principio rector sigue siendo el mismo: no use valores separados : dado que tiene una colección para controles (cajas de grupo), ponga los valores correspondientes en una colección también


Lo siento pero es feo tener colecciones separadas. Debe hacer un control de usuario basado en la casilla de verificación que tiene el int, o usar la etiqueta del control. Puede tener el cuadro de grupo como control que abstraiga los cálculos del formulario, pero eso dependerá de qué más haga con ellos.

public class MyClass : CheckBox { public int MyValue { get; set; } public MyClass() { } }

O solo usa:

value = (int)myCheckBox.Tag;