Когда пользовательский элемент управления имеет Доступную для просмотра ложь на общественной собственности, почему разработчик устанавливает его в NULL при добавлении к форме?

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<script>
  var current_img = 1;
  var i;

  $(document).ready(function(){
    var imgs = $("#image").find("img");

    function show_img(){
      for (i = 1; i < imgs.length+1; i++) {
        if(i == current_img){
          $(imgs[i-1]).show();
        }else{
          $(imgs[i-1]).hide()
        }
      }
    }

    $("#prev").click(function(){
      if(current_img == 1){
        current_img = imgs.length;
      }else{
        current_img = current_img - 1
      }
      show_img();
    });

    $("#next").click(function(){
      if(current_img == imgs.length){
        current_img = 1;
      }else{
        current_img = current_img + 1
      }
      show_img();
    });

  });

</script>
</head>
<body>

<div style="margin-top: 100px;"></div>
<div class="container">
  <div class="col-sm-3">
    <button type="button" id="prev" class="btn">Previous</button>
  </div>

  <div class="col-sm-6">
    <div id="image">
      <img src="https://www.w3schools.com/html/pulpitrock.jpg" alt="image1">
      <img src="https://www.w3schools.com/cSS/img_forest.jpg" alt="image2" hidden="true" style="max-width: 500px;">
      <img src="https://www.w3schools.com/html/img_chania.jpg" alt="image3" hidden="true">
    </div>
  </div>

  <div class="col-sm-3">
    <button type="button" id="next" class="btn">Next</button>
  </div>
</div>

</body>
</html>
12
задан Jeff 12 August 2009 в 21:33
поделиться

2 ответа

Здесь есть несколько вариантов. Во-первых, BrowsableAttribute только определяет, отображается ли свойство в сетке свойств. Чтобы вообще предотвратить сериализацию свойства, используйте атрибут DesignerSerializationVisibilityAttribute:

[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public object Bar { get; set; }

Во-вторых, если вы хотите, чтобы свойство было сериализовано, но только когда пользователь фактически изменил значение, используйте атрибут DefaultValueAttribute:

[Browsable(true)]
[DefaultValue(false)]
public bool IsSomething { get; set; }

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

  1. Значение свойства отображается обычным шрифтом, когда оно не было изменено, и жирным шрифтом, когда оно было изменено.
  2. Параметр «Сброс» будет доступен, когда он будет изменен вправо. щелкнув свойство в сетке свойств.
20
ответ дан 2 December 2019 в 07:04
поделиться

Обычно, когда вы устанавливаете значения в конструкторе своего настраиваемого элемента управления, конструктор VS генерирует код, который устанавливает все те значения, которые вы устанавливаете в конструкторе. IE:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

public class MyTextBox : TextBox
{
    public MyTextBox()
    {
        this.Person = new Person
        {
            FirstName = "John",
            LastName = "Doe",
            Age = 45
        };
    }


    [Browsable(false)]
    public Person Person { get; set; }
}

Когда я добавляю MyTextBox в свою форму, это сгенерированный код:

// 
// myTextBox1
// 
this.myTextBox1.Location = new System.Drawing.Point(149, 91);
this.myTextBox1.Name = "myTextBox1";
person1.Age = 45;
person1.FirstName = "John";
person1.LastName = "Doe";
this.myTextBox1.Person = person1;
this.myTextBox1.Size = new System.Drawing.Size(100, 20);
this.myTextBox1.TabIndex = 3;

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

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

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