Я работал на C # PDA.Недавно я нашел ошибку.
Шаги
Вот шаги по ее воспроизведению:
Введите форму, отсканируйтенекоторые данные.
Закройте форму.
Повторно откройте форму.
- При сканировании данных некоторыеПохоже, что TextBox расположен.
Код
Мы создаем форму:
private void btp1_1_Click(object sender, EventArgs e) {
if(AppCore.core.pdaUser.isAuthorizedMovement(Movements.AltaPalet) == false) {
MessageBox.Show("No estás autorizado para realizar esta operación.");
} else {
try{
//MessageBox.Show("Funcionalidad en desarrollo. Disculpe las molestias");
FormAltaPalet form = new FormAltaPalet(Movements.AltaPalet);
form.ShowDialog();
form.Dispose();
}catch(WebException ex){
MessageBox.Show("Error técnico. " + ex.Message);
}
}
}
Первая строка формы - InitializeComponent.
public FormAltaPalet(Movements movement) {
// GC.Collect();
// GC.WaitForPendingFinalizers();
InitializeComponent();
//clear(FormStep.Step1);
// this.FinishError(); // FIX MA 08.07.2019
this.move = movement;
this.tbp1_1.Focus();
this.material = "";
this.ean14 = "";
context = this;
// SCANNER
if (AppCore.core.dispositivo_PDA ) { // BARCODE 2
myBarcode2 = new Barcode2(Devices.SupportedDevices[0]);
myBarcode2.Enable();
myBarcode2.Scan();
// Register a scan event handler to the barcode object
myBarcode2.OnScan += new Barcode2.OnScanHandler(myBarcode_OnScan);
}
}
Здесь мы создаем текстовые поля и метки.При первом запуске он работает нормально, начинает закрываться и снова открываться.
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormAltaPalet));
this.pmm = new System.Windows.Forms.Panel();
this.bt_mm_2 = new System.Windows.Forms.Button();
this.bt_mm_1 = new System.Windows.Forms.Button();
this.p1 = new System.Windows.Forms.Panel();
this.label_error_1 = new System.Windows.Forms.Label();
this.btp1_2 = new System.Windows.Forms.Button();
this.lbp1_6 = new System.Windows.Forms.Label();
this.tbp1_6 = new System.Windows.Forms.TextBox();
this.tbp1_4 = new System.Windows.Forms.TextBox();
this.tbp1_3 = new System.Windows.Forms.TextBox();
this.tbp1_2 = new System.Windows.Forms.TextBox();
this.tbp1_1 = new System.Windows.Forms.TextBox();
this.lbp1_4 = new System.Windows.Forms.Label();
this.lbp1_3 = new System.Windows.Forms.Label();
this.lbp1_2 = new System.Windows.Forms.Label();
this.lbp1_1 = new System.Windows.Forms.Label();
this.pbp1_1 = new System.Windows.Forms.PictureBox();
this.pmm.SuspendLayout();
this.p1.SuspendLayout();
this.SuspendLayout();
Когда мы достигаем метод в классе, мы получаем текущий контекст:
void myBarcode_OnScan(ScanDataCollection sd) {
context = this;
this.tbp1_1 = getTbl1_1();
Но это неправильно, Объекты, кажется, расположены:
https://imgur.com/bayiySg
РЕДАКТИРОВАТЬ: Когда я нажимаю кнопку, показанную в первом фрагменте кода, форма должна быть создана.Когда я закрываю форму, она должна быть утилизирована.Код метода Dispose таков:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Кажется, компонент Initialize хорошо работает и во втором запуске, но когда он достигает метода сканирования, TextBoxs удаляются .... Вопрос
Я довольно новичок в разработке C #, так что я немного растерялся.
Я думаю, что что-то происходит с частью Dispose.
В любом случаечтобы решить эту проблему?
Спасибо!