2016-09-02 3 views
0

Вот мой предыдущий вопрос, если вы хотите, чтобы некоторые более подробную информацию о моей нынешней проблеме:Программа работает корректно только в режиме отладки

WinForm: Inherited Panel wont Autosize

Если вы не хотите, чтобы прочитать его, я буду дать вам общую информацию:

  • Я не работаю непосредственно с помощью программы, я просто редактирования конкретной DLL, который используется в этой программе
  • Это означает, что у меня нет какой-либо Доступ s к исходному коду этой конкретной программы
  • Это также означает, что я должен исправить эту проблему с помощью некоторых изменений в DLL, то есть, как я упоминал ранее, используемых этой программой.

То, что я узнал до сих пор:

  • Он работает без каких-либо проблем, если я прилагаю программу исходного кода DLL в VS2015.
  • Но у меня есть некоторые сбои, если я создаю код, а затем копирую DLL в папку программы - это тоже моя реальная проблема: она каким-то образом сокращает таблицуLayoutpanel до половины ее фактического размера, и я получаю некоторые странные сбои в другой половине его фактический, при нормальном запуске как-то не используется, размер.

Что я опробовал:

  • Я изменил размер вручную, а не через "Dock = Fill" or "Autosize = true" и она работала. Но это, как вы все знаете, не лучшее решение, и мы хотим его использовать, если нет другого пути. Никто не любит жесткого кода.

  • Я пытался наследовать размер своего родителя с помощью:

    this.tablelayoutPanel.Size = this.Size; и
    this.tableLayoutPanel.Size = new Size(this.Height, this.Size);

Так что вы, ребята, есть какие-нибудь идеи?

+0

Как насчет отладки версии режима выпуска? –

+0

Это случается со мной однажды. Оказывается, переменные среды двух процессов различны. Вы можете использовать Process Explorer, чтобы узнать это. – neohope

+1

@UweKeim Да, это звучит неплохо. Я попробую это скоро. – TheOnionMaster

ответ

0

Хорошо, я не понял, почему отладчик работал, а релиз/отладка не работает. Но я просто заставил перерисовать на таблицеLayoutPanelMainwith с Application.DoEvents(). Я никогда не пробовал это раньше, потому что Invalidate() + Update() или Refresh() не работал - я был похож: хорошо, это не так просто, поэтому просто забывайте об этом.

Но после некоторого испытания & ошибка и много времени ... ну, я работал в течение двух недель на этом ... Я пробовал самое простое и YEAHY, это сработало!

В любом случае, спасибо вам за помощь, ребята. Я ценю это.

+2

Если вы решаете проблему с DoEvents, то, скорее всего, вы перерабатываете реальную проблему, а не исправляете ее. Устранение проблем с DoEvents опасно; он может ввести неожиданное повторное вмешательство. И это симптоматично фиксировать проблемы наугад, а не понимать проблему и применять принципиальное исправление на архитектурном уровне. –

+0

Итак, у вас есть идея исправить это правильно? Почему Refresh() не работает? Я действительно верю, что команда, использующая нашу DLL, справилась с этой проблемой. Мое решение больше похоже на обходное решение. Я знаю об этом, но пока мне не разрешено изменять внешний код источника, это единственный способ исправить его. Я тоже не очень счастлив этим решением, так как я действительно считаю, что это может повредить другие программы, которые используют одну и ту же DLL. Но: В любом случае это тестовая подготовка, так что пока она работает: все в порядке. А если нет: я попытаюсь найти другое решение. – TheOnionMaster

Смежные вопросы