private void TextBoxAvgSet_TextChanged(object sender, EventArgs e) { Setter(sender as TextBox, new IntPtrVoid(camera.Average), new VoidPtrInt(camera.Average), "Average", cameraControlGUI.LabelAvgShow); } private void Setter(TextBox sender, Delegate output, Delegate input, string str, Label shower) { string text = sender.Text; if (text.Contains("\r\n")) { sender.Text = text = text.Replace("\r\n", ""); var converter = TypeDescriptor.GetConverter(typeof(InType)); try { var value = (InType)converter.ConvertFromString(text); input.DynamicInvoke(value); if (!EqualityComparer.Default.Equals(value, (InType)output.DynamicInvoke())) { cameraControlGUI.LabelErrorCodeShow.Text = "無法設定" + str + ",將設定改回預設值"; sender.Text = Convert.ToString(output.DynamicInvoke()); } shower.Text = Convert.ToString(output.DynamicInvoke()); } catch (NotSupportedException exception) { cameraControlGUI.LabelErrorCodeShow.Text = exception.ToString(); } catch (Exception exception) { cameraControlGUI.LabelErrorCodeShow.Text = exception.ToString(); } } }