2010-03-01 5 views
0

J'ai le code suivant qui fait un survol de l'image sur les boîtes de photos situées à l'intérieur d'une table. Chaque cellule de table contient une zone d'image.C# ToolTip Problème

le problème étant que même dans le code, il est indiqué qu'aucune info-bulle au-dessus de la zone d'image ne doit être affichée, d'une certaine manière certaines infobulles s'affichent. Je ne peux pas le trouver dans le code car le code ne précise aucune info-bulle!

J'ai essayé plusieurs approches, mais elles semblent toutes se confondre lorsque des info-bulles sont utilisées. Y a-t-il un bug connu dans le contrôle ToolTip?

private bool deployingShip = false; 

    private void PictureBox_MouseEnter(object sender, EventArgs e) 
    { 
     PictureBox HomeCurrentPicBox = ((PictureBox)(sender)); 
     TableLayoutPanelCellPosition HomeCurrentPosition = HomeTableLayoutPanel.GetCellPosition(HomeCurrentPicBox); 

     RefreshHomeGrid(); 

     if (deployingShip == false) 
     { 
      if (GameModel.HomeCellStatus(HomeCurrentPosition.Column, HomeCurrentPosition.Row) == Cell.cellState.Water) 
      { 
       HomeTableLayoutPanel.Cursor = Cursors.Hand; 
       HomeCurrentPicBox.Image = Properties.Resources.Scan; 
       HomeCurrentPicBox.Refresh(); 
      } 
      else 
      { 
       HomeTableLayoutPanel.Cursor = Cursors.No; 
       HomeTableLayoutPanel.Refresh(); 
      } 
      gameFormToolTip.SetToolTip(HomeCurrentPicBox, GameModel.alphaCoords(HomeCurrentPosition.Column) + "," + HomeCurrentPosition.Row); 
     } 

     if (deployingShip == true) 
     { 
      Cell.cellState state = GameModel.HomeCellStatus(HomeCurrentPosition.Column, HomeCurrentPosition.Row); 
      switch (state) 
      { 
       case Cell.cellState.Origin: 
        HomeTableLayoutPanel.Cursor = Cursors.Hand; 
        gameFormToolTip.SetToolTip(HomeCurrentPicBox, currentShip.ToString() + ": " + Cell.cellState.Origin); 
        break; 

       case Cell.cellState.EndPoint: 
        HomeTableLayoutPanel.Cursor = Cursors.Hand; 
        gameFormToolTip.SetToolTip(HomeCurrentPicBox, currentShip.ToString() + ": " + Cell.cellState.EndPoint); 
        break; 
       default: 
        HomeTableLayoutPanel.Cursor = Cursors.No; 
        HomeTableLayoutPanel.Refresh(); 
        return; 
      } 
     } 
    } 

    private void PictureBox_MouseLeave(object sender, EventArgs e) 
    { 
     PictureBox HomeCurrentPicBox = ((PictureBox)(sender)); 
     TableLayoutPanelCellPosition HomeCurrentPosition = HomeTableLayoutPanel.GetCellPosition(HomeCurrentPicBox); 

     if (GameModel.HomeCellStatus(HomeCurrentPosition.Column, HomeCurrentPosition.Row) == Cell.cellState.Water) 
     { 
      HomeCurrentPicBox.Image = Properties.Resources.Water; 
      HomeCurrentPicBox.Refresh(); 
     } 
    } 

merci, je crains que vous ne soyez pas en mesure de trouver le bug de ce code soumis :(

Répondre

2

vous manque l'appel à supprimer explicitement les anciennes valeurs de l'info-bulle? Basé sur le code, je « devine qu'il serait probablement appartenir au gestionnaire d'événements MouseLeave.

gameFormToolTip.SetToolTip(HomeCurrentPicBox, ""); 
+0

testé pour l'instant! Merci d'avoir un comportement de setToolTip à la clarté! c'est tout. Merci beaucoup de fois. – iTEgg

+0

il m'a toujours buggé que infobulle n » t avoir une commande claire. Aussi, ne devrait pas "" être 'String.Empty'? – Powerlord

+0

oui j'ai utilisé string.empty mais John L. a fourni une solution solide. – iTEgg