Как создать Управление C# Winforms, которое колеблется

После создания резервной копии моих данных с помощью mongodump, выключения mongo, удаления всей базы данных с помощью rm -rf 'path-to-database', перезагрузки mongo (без конфигурации репликации) и восстановления данных с помощью mongorestore, mongodb все еще падает. На этот раз, однако, происходит сбой Инварианта после открытия: операция не разрешена. Единственный вывод, который я могу придумать, заключается в том, что сами данные каким-то образом повреждены. К счастью, это не «критически важные» данные, так что я могу легко получить новые данные.

К сожалению, это не отвечает на мой первоначальный вопрос «какие еще есть варианты?». Тем не менее, я все еще публикую это на тот случай, если другие столкнутся с такой же проблемой.

РЕДАКТИРОВАТЬ: проблема с инвариантом была вызвана тем, что я забыл повторно инициализировать свой набор репликации. После исправления это чисто. Из-за этого я больше не верю, что это была проблема с повреждением данных, а проблема с повреждением контрольной точки.

РЕДАКТИРОВАТЬ 2: Таким образом, проблема возникла снова примерно через неделю, и после очередной недели пробовал различные методы отладки, я попытался просто перенести процесс Монго на другой сервер. Пока это работает. Предыдущий сервер работал (в какой-то момент я даже не смог запустить top - у другого процесса была блокировка необходимого библиотечного файла для его запуска), так что стоит надеяться, что текущий сервер не следует за пакетом.

9
задан maxfridbe 9 December 2008 в 17:21
поделиться

2 ответа

Windows Forms не поддерживают окна как этот хорошо, это является довольно существенно несовместимым с разработчиком. Вот некоторый код для запущения Вас. Вы не можете использовать это управление в разработчике, оно должно быть создано во времени выполнения. Также необходимо назвать Располагать () метод сами.

using System;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;

public class MyListBox : ListBox {
  private Control mParent;
  private Point mPos;
  private bool mInitialized;

  public MyListBox(Control parent) {
    mParent = parent;
    mInitialized = true;
    this.SetTopLevel(true);
    parent.LocationChanged += new EventHandler(parent_LocationChanged);
    mPos = mParent.Location;
  }

  public new Point Location {
    get { return mParent.PointToClient(this.Location); }
    set { 
      Point zero = mParent.PointToScreen(Point.Empty);
      base.Location = new Point(zero.X + value.X, zero.Y + value.Y);
    }
  }

  protected override Size DefaultSize {
    get {
      return mInitialized ? base.DefaultSize : Size.Empty;
    }
  }

  protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified) {
    if (this.mInitialized)
      base.SetBoundsCore(x, y, width, height, specified);
  }

  void parent_LocationChanged(object sender, EventArgs e) {
    base.Location = new Point(base.Left + mParent.Left - mPos.X, base.Top + mParent.Top - mPos.Y);
    mPos = mParent.Location;
  }

  protected override CreateParams CreateParams {
    get {
      CreateParams cp = base.CreateParams;
      if (mParent != null && !DesignMode) {
        cp.Style = (int)(((long)cp.Style & 0xffff) | 0x90200000);
        cp.Parent = mParent.Handle;
        Point pos = mParent.PointToScreen(Point.Empty);
        cp.X = pos.X;
        cp.Y = pos.Y;
        cp.Width = base.DefaultSize.Width;
        cp.Height = base.DefaultSize.Height;
      }
      return cp;
    }
  }
}
8
ответ дан 4 December 2019 в 21:13
поделиться

Я сделал что-то подобное этому недавно, и я использовал ListBox. Прохладные думают о поле списка, то, что можно отобразить его где угодно, Вы хотите, даже за пределы Вашего управления. Тот путь, когда Вы обнаруживаете через нажатие кнопки или что бы то ни было, что необходимо отобразить DropDown, который Вы хотите, просто заполняет ListBox и отображает его где угодно, Вы хотите. Я получил идею отсюда:

http://msdn.microsoft.com/en-us/library/aa480727.aspx

Они показывают, как создать Пользовательский DataGridView с фильтрацией, и отобразить значения фильтра, они размещают ListBox под ячейкой заголовка.

2
ответ дан 4 December 2019 в 21:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: