Насколько мне известно, ваше решение не очень хорошее
Мое решение
Просто я изменяю ваши данные следующим образом
Теперь я вижу, что это отношение находится в 0-й нормальной форме
Так что удалите столбец имени и создайте новое отношение, как показано ниже
Теперь отношение клиента находится в
Отношение покупателя такое же, но оно все еще находится в 0-й нормальной форме [117 ]
Теперь я удаляю столбец купил_сайт из отношения покупателя и создаю новое отношение, как показано ниже
Теперь приобретенное отношение находится в
Так что теперь я обновляю отношение покупателя, как показано ниже [ 1130]
и ID, и Item_ID являются первичными ключами (составной первичный ключ)
Теперь отношения покупателя, покупателя и покупателя находятся в 3-й нормальной форме, поскольку нет многозначных атрибутов, все полностью зависят от первичного ключа, нет переходных атрибутов.
Окончательные отношения:
Мой плохой, я забыл специально упомянуть, что в нормализации мы не можем добавить новый атрибут или удалить атрибуты . Так что здесь я просто изменяю ваше отношение к данным только на более понятное отношение. Спасибо @Mike Sherrill 'Cat Recall за указание на эту проблему.
Необходимо сделать некоторый Win32 interop для достижения того эффекта. В зависимости от того, используете ли Вы Winforms или WPF, способ, которым Вы сцепляетесь с обработкой сообщения, отличается (я не помню Winforms, таким образом, я дам все примеры для WPF). Но в обоих случаях, Вы должны:
Прерывание создание окна и изменяют стили окна и расширенные стили. В WPF необходимо наследоваться от [1 112] HwndSource
и изменить HwndSourceParameters
для достижения этого. Вам нужны WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS и WS_VISIBLE для регулярного стиля и WS_EX_WINDOWEDGE и расширенных стилей WS_EX_APPWINDOW.
Добавляют обработчика сообщений через него параметры HwndSource HwndSourceHook.
В сообщении proc добавленный через рычаг на шаге два, необходимо обработать несколько сообщений:
WM_NCACTIVATE
- для изменения рисования заголовка, когда приложение активируется или не WM_NCCALCSIZE
- для возврата к ОС, что у Вас нет неклиентских областей WM_NCPAINT
- в целом, Вам нужно к invaldate, окно реагирует только здесь, WPF будет заботиться о фактическом рисовании) WM_NCHITTEST
- для обработки перемещения окна, уменьшения и максимизации. , После того как Вы делаете вышеупомянутое, Ваша клиентская область, куда WPF собирается нарисовать Ваше визуальное дерево, собирается охватить целую область окна. Необходимо будет добавить "non-cliet" зрительный ряд так, чтобы приложение было похоже на регулярное применение пользователю.
Вам, возможно, понадобились бы еще несколько сообщений:
WM_THEMECHANGED
, если Вы хотите изменить свое "неклиентское" рисование области, чтобы согласовываться с темой ОС WM_DWMCOMPOSITIONCHANGED
, если Вы хотите расширить стекло и получить стандартное рисование стекла NC ОС, когда стекло включено и переключатель к Вашей пользовательской логике, когда стекло не. Вы могли бы хотеть посмотреть на API Темы Win32, если Вы хотите, идут, заставляют стандартные активы Win32 для границ, подписи, близко, mininmize и кнопок развертывания окна использовать в Вашем 'неклиенте" область.
, Если Вы хотите расширить Стекло в свое окно, можно посмотреть на:
DwmExtendFrameIntoClientArea
- чтобы заставить стандартную стеклянную область NC DwmDefWindowProc
- заставлять среду рабочего стола красить Стекло и стандартные средства управления NC DwmIsCompositionEnabled
- чтобы определить, включено ли Стекло; можно использовать вышеупомянутые два API только, когда Стекло включено. Если Стекло не включено, необходимо сделать собственный рисунок области NC. можно найти надлежащие определения C# всех сообщений, стилей и соответствующих API Win32, в которых Вы нуждаетесь на [1 123] P/Invoke.
Вы могли также достигнуть подобного эффекта при помощи стандартного окна WPF с WindowStyle=none
. Однако будут некоторые различия между поведением рабочего стола к Вашему приложению и другими приложениями; самый очевидный из них то, что Вы не сможете сложить или разместить Ваше окно рядом путем щелчка правой кнопкой по панели задач.
можно также изучить некоторые сторонние компоненты, которые добавляют часть этой функциональности. Я не использовал никого (как Вы видите, я не боюсь Win32 interop :-)), таким образом, я не могу рекомендовать Вам никакой конкретный.
У Joe Castro, разработчика команды продукта WPF, есть проект галереи кода MSDN, названный "WPF Chrome", который может использоваться для создания офиса подобный 2007 UI (т.е.: средства управления, которые охватывают и клиент и неклиентские области окна).
Находят его здесь: http://code.msdn.microsoft.com/chrome
Как упоминания Franci, что Вы хотите, DwmExtendFrameIntoClientArea. Вот пример от Codeproject, который показывает, как сделать это.
http://www.codeproject.com/KB/dialog/AeroNonClientAreaButtons.aspx
Я использовал комплект управления DotNetBar с хорошим успехом.