MS Access 2003/2007 - объект диаграммы во вспомогательной форме, не загружающийся при загрузке родительских форм

Итак, у меня есть подчиненная форма, на которой просто есть один объект диаграммы. Он небольшой, и это единственное предназначение этого сабвуфера. Затем у меня есть около 10 форм, в каждой из которых есть подокна с этой формой в качестве дочерней. Я использую запрос UNION, чтобы показать текущий баланс 10 счетов в каждой форме с этой диаграммой для сравнительных целей. Все работает нормально, кроме одной мелочи ...

когда вы открываете любую из этих форм, вы должны навести указатель мыши на фактическое подокно и щелкнуть внутри него, чтобы отобразить диаграмму. как только вы это сделаете, он отлично работает на всех без исключения формах, но эта же проблема повторяется и во всех этих формах, поэтому я уверен, что мне что-то здесь не хватает?

Есть идеи по этому поводу?

спасибо Джастин


person Justin    schedule 29.06.2010    source источник
comment
Просто догадываюсь, пробовали ли вы перерисовать подпрограмму в событии загрузки формы?   -  person Fionnuala    schedule 29.06.2010
comment
Не уверен, что Repaint что-нибудь сделает - Refresh может. Или, возможно, потребуется запросить объект графика (я не знаю, есть ли у него метод Requery, поскольку я отказался от MS Graph более 10 лет назад!).   -  person David-W-Fenton    schedule 30.06.2010
comment
да, я попробовал me.Chart.requery (диаграмма - это имя объекта OLE). не сработало. это забавно ... если вы щелкните область подокна, а затем щелкните что-нибудь еще, оно будет появляться в каждом случае. поэтому я попытался сфокусироваться на объекте, а затем выключить его ... но в родительской форме. поэтому я точно не знаю, что использовать, чтобы перейти к .chart.setfocus, потому что этот элемент управления фактически находится в подчиненной форме. Я пробовал формы! Subform.chart ... не могу этого сделать. Я пробовал меня! subform.chart.setfocus, и это тоже не сработало ... просто наносило удары в основном.   -  person Justin    schedule 30.06.2010
comment
@Remou ... не могли бы вы привести пример перерисовки, если Form = frmMain, sub = frmSub и Object = Chart? Спасибо!   -  person Justin    schedule 30.06.2010
comment
Есть ли у него событие / метод Activate? Возможно, сосредоточить внимание на нем?   -  person David-W-Fenton    schedule 01.07.2010
comment
нет, это не Дэвид ... так что позвольте мне спросить вас об этом ... если бы это была вспомогательная форма, которая просто содержала элемент управления, например текстовое поле, как бы я мог ссылаться на нее в форме кода программной части родительской формы? ? me.SubWindow. дает мне только ссылку на окно, а не то, что внутри него, верно? если бы я попробовал me.SubWindow.SubTextBox ... это выдает мне ошибку. Как ссылаться на элементы управления в подчиненной форме? Спасибо, парни!   -  person Justin    schedule 01.07.2010
comment
Элемент управления подчиненной формы не является формой, но элемент управления подчиненной формы имеет свойство Form, которое возвращает ссылку на форму, загруженную в элемент управления подчиненной формы, таким образом: Me! MySubForm.Form, где MySubForm - имя элемента управления подчиненной формы (который встраивает подчиненная форма, называемая zzzzzSleepyForm - имя и существование элемента управления подчиненной формы полностью не зависят от имени встроенной в нее подчиненной формы).   -  person David-W-Fenton    schedule 02.07.2010


Ответы (2)


Я думаю, вы можете решить эту проблему, не используя подчиненную форму, а используя элемент управления диаграммой, непосредственно вставленный в форму. Я знаю, что создание элемента управления диаграммой в любой форме может быть головной болью, но, сделав это, вы можете напрямую управлять источником данных диаграммы независимо от любой другой формы.

Пример:

Я предполагаю, что вам нужно обновить диаграмму после обновления текстового поля (txtExample). Вы можете изменить источник данных элемента управления с помощью события afterUpdate:

Private Sub txtExample_AfterUpdate()
  chart1.RowSource = "SELECT ... FROM ..." 
  chart1.Requery
End Sub

Свойство RowSource объекта диаграммы будет изменяться и обновляться каждый раз при обновлении значения текстового поля.

Надеюсь, что это работает для вас

person Barranka    schedule 02.07.2010
comment
Какая версия MS-Graph позволяет динамически присваивать SQL? Я не возился с MS-Graph более 10 лет, но одна из проблем заключалась в том, что было непросто изменить SQL во время выполнения, поэтому вам часто приходилось редактировать сохраненный QueryDef, чтобы изменить данные, на которых была основана диаграмма. Но, конечно - я мог неправильно вспомнить, или более новые версии MS-Graph допускают большую гибкость. - person David-W-Fenton; 03.07.2010
comment
@ Дэвид ... ну, я не уверен во всех версиях, которые позволяют это, но я знаю, что вы можете с 2003, и, вероятно, с 2007 годом. У меня есть несколько отчетов с диаграммами, в которых используется вышеуказанный метод (вид), значения из формы передаются в источник строк и при открытии отчетов. Я просто надеялся, что смогу сделать это по-другому, потому что это, по сути, одна и та же диаграмма во всех этих формах, поэтому я сделал вспомогательную форму с диаграммой, чтобы сэкономить некоторые усилия. но учитывая, что это всего около 10 форм, думаю, я могу пойти по этому пути. Я использую вышеупомянутый метод .rowsource для этих отчетов ... - person Justin; 03.07.2010

Я поискал эту проблему и обнаружил, что me.graph1.requery не помогает в моей версии 2003 года. В отчаянии я попытался сделать следующее: docmd.requery (Graph1) вылетает, но когда вы вставляете on error resume next, он показывает график каждый раз! В истинном стиле Microsoft я думаю исправить это с помощью другой глючной штуки.

person ettemarc    schedule 15.12.2011